Mausklickereignis in selbst definierter Klasse funktioniert nicht

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Mausklickereignis in selbst definierter Klasse funktioniert nicht

    Hallo zusammen,

    Ich habe mir eine eigene Klasse geschrieben, in der ich eine Picbox, eine Checkbox, einen Label und einen Panel zu einen Objekt vereine.

    VB.NET-Quellcode

    1. Public Class PBox
    2. 'Inherits Panel
    3. Dim WithEvents PPicBox As New PictureBox
    4. Dim WithEvents PChkBox As New CheckBox
    5. Dim WithEvents PLab As New Label
    6. ReadOnly Property GetPPan() As New Panel
    7. Public Sub New(pi As PictureBox, c As CheckBox, l As Label, pn As Panel)
    8. PPicBox = pi
    9. PChkBox = c
    10. PLab = l
    11. GetPPan = pn
    12. End Sub
    13. Public Event PBoxDoubleClick(ByVal sender As Object, e As MouseEventArgs)
    14. Private Sub PPicBox_MouseDoubleClick(ByVal sender As Object, e As MouseEventArgs) Handles PPicBox.MouseDoubleClick
    15. RaiseEvent PBoxDoubleClick(Me, e)
    16. End Sub
    17. Public Event PBoxClick(ByVal sender As Object, e As MouseEventArgs)
    18. Private Sub PPicBox_MouseClick(ByVal sender As Object, e As MouseEventArgs) Handles PPicBox.MouseClick
    19. RaiseEvent PBoxClick(Me, e)
    20. End Sub
    21. Private Sub PLab_MouseClick(ByVal sender As Object, e As MouseEventArgs) Handles PLab.MouseClick
    22. RaiseEvent PBoxClick(Me, e)
    23. End Sub
    24. Private Sub PChkBox_MouseClick(ByVal sender As Object, e As MouseEventArgs) Handles PChkBox.MouseClick
    25. RaiseEvent PBoxClick(Me, e)
    26. End Sub
    27. [...]


    Nun will ich die neue Klasse mit Ereignissen belegen MouseDoubleClick und MouseClick

    In meinem Hauptprogramm löse ich das so:

    VB.NET-Quellcode

    1. Dim pb(999) As PBox
    2. [...]
    3. AddHandler pb(g.imgCount).PBoxClick, AddressOf PicSelectClick
    4. AddHandler pb(g.imgCount).PBoxDoubleClick, AddressOf PicBoxLarge
    5. [...]


    Doch egal ob ich nun Klicke oder Doppelklicke komme ich immer bei dem Event raus, das bei PBoxClick hinterlegt ist.

    Sieht jemand meinen Fehler?
    Ein Doubeclick löst immer auch zuerst den normalen Click aus.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Zur Nachstellung meines Ergebnisses:
    Ich hau mir n Label und ne PicBox auf's Form und habe folgenden Code:

    VB.NET-Quellcode

    1. Private Sub Button1_MouseClick(sender As Object, e As MouseEventArgs) Handles PictureBox1.MouseClick
    2. Label1.Text &= "*"
    3. End Sub
    4. Private Sub Button1_MouseDoubleClick(sender As Object, e As MouseEventArgs) Handles PictureBox1.MouseDoubleClick
    5. Label1.Text &= "|"
    6. End Sub
    Selbst wenn ich nen Doppelklick durch ein Programm wie X-Mouse Button Control durch Druck einer Maustaste simuliere, bekomme ich immer *| an den Label-Text angehangen -> MouseClick und MouseDoubleClick werden beide gefeuert. Deinen Aussagen in Post#3 kann ich daher nicht folgen.

    btw.: Dass es für die Zusammenführung von Controls zu einem ein UserControl gibt, weißt Du?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    @GRRRRRD Was ganz genau willst Du erreichen?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Danke!! -Das war mir nicht aufgefallen. Du hast natürlich völlig recht ... aber wie komm ich aus der Nummer raus? Muss ich mit einem Timer arbeiten, um die zu differenzieren?

    @RodFromGermany: Ich will zw. Click und Doubleclick differenzieren.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „GRRRRRD“ ()

    GRRRRRD schrieb:

    Muss ich mit einem Timer arbeiten, um die zu differenzieren?
    Nein, das macht der unterschiedliche Text.
    Und:

    RodFromGermany schrieb:

    Was ganz genau willst Du erreichen?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ich will mit Click die sub PicSelectClick aufrufen und mit Doubleclick die sub PicBoxLarge ... ich lande aber mit der eingangs geschilderten Vorgehensweise immer in der sub PicSelectClick - was ich aufgrund des Beispiels von VaporiZed auch verstanden habe.
    Guck mal im MSDN-Artikel nach. Da stellt sich die Frage, ob Du nicht lieber mit anderen UI-Interaktionen als Click/DoubleClick zum Ziel kommen willst.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    @GRRRRRD Das ist leider so, weil die ganzen Maus-Down, Clock, DoubleClick, Up usw. alle nacheinander kommen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!