| |
| In diesem Forum haben Sie die Möglichkeit Kommentare, Fragen und Verbesserungsvorschläge zu den im vb@rchiv gelisteten Tipps und Workshops zu posten.
Hinweis: Ein neues Thema kann immer nur über die jeweilige Tipps & Tricks bzw. Workshop Seite eröffnet werden! | Fragen zu Tipps & Tricks und Workshops im vb@rchivTipp 2362: Einfacher Trick zum Auslösen von Ereignissen auf anderer Form | | | Autor: us4711 | Tipp anzeigenDatum: 04.02.13 08:48 |
| Funktioniert so nicht. Schon im Editor wird folgender Fehler angezeigt:
Public Event RowHeaderMouseClick(sender As Object, e As System.Windows.Forms.DataGridViewCellMouseEventArgs)" ist ein Ereignis und kann nicht direkt aufgerufen werden. Verwenden Sie eine RaiseEvent-Anweisung, um ein Ereignis aufzurufen.
| |
Re: Einfacher Trick zum Auslösen von Ereignissen auf anderer Form | | | Autor: thuring | Datum: 04.02.13 08:59 |
| Hi,
bei mir funktioniert es x-fach.
Public Event... müsste eigentlich Private Sub... heißen.
Du müsstest bitte mal deinen gesamten Code posten.
Grüße-
Salzburger | |
Re: Einfacher Trick zum Auslösen von Ereignissen auf anderer Form | | | Autor: us4711 | Datum: 04.02.13 09:15 |
| Gerne.
Form1 ist eine Form mit Datagridview.
Der darunterliegende Code:
Public Class Form1
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) _
Handles MyBase.Load
End Sub
' Code in Form, die das Control enthält
Public Sub myTriggerEvent()
' und gibt hier das gewünschte Ereignis an bspw.
DataGridView1.RowHeaderMouseClick(DataGridView1, Nothing)
End Sub
End Class Das ist ja Dein Code aus dem Foumsbeitrag, sonst nichts.
Und die Zeile DataGridView1.RowHeaderMouseClick(DataGridView1, Nothing) ist unterkringelt, und dazu wird der oben gepostete Fehlertext angezeigt ... | |
Re: Einfacher Trick zum Auslösen von Ereignissen auf anderer Form | | | Autor: us4711 | Datum: 04.02.13 10:32 |
| Habs ausprobiert, andert jedoch erwartungsgemäß garnichts, die dies Prozedur ja erst NACH dem Auslösen eines Events aufgerufen wird. Wie auch MSDN sagt, Events von Controls NICHT direkt aufgerufen werden können.
Und der Handler hat NICHTS mit dem direkten Aufruf des Events im Control zu tun. | |
Re: Einfacher Trick zum Auslösen von Ereignissen auf anderer Form | | | Autor: us4711 | Datum: 04.02.13 10:54 |
| Hinzu kommt:
Wenn Control.Event mehrfach abonniert ist, würde nur ein Abonnement ausgeführt werden ... das führt zu unvorhersehbarem Verhalten. | |
Re: Einfacher Trick zum Auslösen von Ereignissen auf anderer Form | | | Autor: thuring | Datum: 05.02.13 09:03 |
| Dafür ist der Tipp auch nicht gedacht!
Ein wenig Sorgfalt muss man dann auch bei der Anwendung walten lassen.
Die Tipps hier sind natürlich auch überhaupt kein "Muss", es sind u.a. Anregungen zum Weiterdenken und Modifizieren.
Vielleicht hast du ja ne Idee, wie man die Fragestellung mit mehreren Abonennten realisieren kann.
Ciao-
Salzburger | |
Re: Einfacher Trick zum Auslösen von Ereignissen auf anderer Form | | | Autor: Preisser | Datum: 05.02.13 13:36 |
| Hallo,
ich weiß nicht, ob es bei VB.Net wieder Sonderfälle gibt, aber normalerweise gilt:
Ein Event kann nur von der Klasse ausgelöst werden, die es deklariert - d.h. nicht von Unterklassen oder fremden Klassen. Diese können nur Handler hinzufügen oder entfernen.
Damit jedoch Unterklassen die Events auch auslösen können, benutzt man normalerweise die protected On<Ereignisname>(...)-Methoden, die das Ereignis auslösen, falls es nicht null ist.
Wenn man also beispielsweise ein Ereignis eines DataGridView von außerhalb auslösen will, müsste man eine Unterklasse mit einer Public Methode erstellen, die dann wiederrum die On<...>-Methode aufruft. Dann werden alle registrierten Handler dieses Ereignisses aufgerufen.
Der Code aus dem Tipp kann deshalb eigentlich nicht funktionieren, da er versucht, ein Ereignis direkt von außen aufzurufen.
Public Class MyDataGridViewSubclass
Inherits DataGridView
Public Sub RaiseRowHeaderMouseClick(e As DataGridViewCellMouseEventArgs)
OnRowHeaderMouseClick(e)
End Sub
End Class Allerdings stimme ich mit DaveS überein, dass dies eigentlich ein Zeichen von schlechtem Design ist. Normalerweise gibt es keinen Grund, von außen ein Ereignis auslösen zu lassen - eine Klasse muss eigentlich selbst wissen, wann sie welche Ereignisse auslöst.
Beitrag wurde zuletzt am 05.02.13 um 13:37:03 editiert. | |
| Sie sind nicht angemeldet! Um einen neuen Beitrag schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
Neu! sevPopUp 2.0
Dynamische Kontextmenüs!
Erstellen Sie mit nur wenigen Zeilen Code Kontextmenüs dynamisch zur Laufzeit. Vordefinierte Styles (XP, Office, OfficeXP, Vista oder Windows 8) erleichtern die Anpassung an die eigenen Anwendung... Weitere InfosTipp des Monats TOP Entwickler-Paket
TOP-Preis!!
Mit der Developer CD erhalten Sie insgesamt 24 Entwickler- komponenten und Windows-DLLs. Die Einzelkomponenten haben einen Gesamtwert von 1605.50 EUR...
Jetzt nur 599,00 EURWeitere Infos
|