vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
TOP-Angebot: 17 bzw. 24 Entwickler-Vollversionen zum unschlagbaren Preis!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

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!

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Fragen zu Tipps & Tricks und Workshops im vb@rchiv
Tipp 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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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 ...
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Einfacher Trick zum Auslösen von Ereignissen auf anderer Form 
Autor: thuring
Datum: 04.02.13 10:18

Nun, in deiner Form mit dem DatagridView muss natürlich auch der Code zur Ereignisprozedur stehen, wie z.B:

Private Sub  DataGridView1_RowHeaderMouseClick(sender As Object, e As _
  DataGridViewCellMouseEventArgs) Handles  DataGridView1.RowHeaderMouseClick
' hier dein Code für die Verarbeitung
End Sub
unterkringelt find ich niedlich

Grüße-

Salzburger

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Einfacher Trick zum Auslösen von Ereignissen auf anderer Form 
Autor: ModeratorDaveS (Moderator)
Datum: 04.02.13 10:42

Ist sowieso eine fragwürdige Methode. Mach aus dem Eventcode eine gemeinsame Routine, die vom Event und auch extern aufgerufen werden kann, wenn zwei Forms überhaupt so interagieren müssen. Ist meistens ein Zeichen vom schlechten Design.

________
Alle Angaben ohne Gewähr. Keine Haftung für Vorschläge, Tipps oder sonstige Hilfe, falls es schiefgeht, nur Zeit verschwendet oder man sonst nicht zufrieden ist

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Einfacher Trick zum Auslösen von Ereignissen auf anderer Form 
Autor: ModeratorDaveS (Moderator)
Datum: 04.02.13 12:38

Stimmt natürlich auch.

________
Alle Angaben ohne Gewähr. Keine Haftung für Vorschläge, Tipps oder sonstige Hilfe, falls es schiefgeht, nur Zeit verschwendet oder man sonst nicht zufrieden ist

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um einen neuen Beitrag schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel