MouseDoubleClick ignorieren

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

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von Peter329.

    MouseDoubleClick ignorieren

    Hi,

    Ich habe eine DataGridView ... in dieser View verarbeite ich ausgewählte Einträge durch MouseDoubleClick.

    Mit einem Click auf den ColumnHeader sortiere ich die DataGridView, wie es üblich ist.

    Wenn nun der Anwender versehentlich den ColumnHeader mit DoubleClick adressiert, dann wird zuerst das Even ColumnHeaderDoubleClick ausgeführt und dann feuert DoubleClick. Und damit wird die Zeile verarbeitet, die zufälligerweise gerade ausgewählt war, was ziemlich blöde Folgen haben kann.

    Wie kann ich denn den MouseDouble Click auf den Column Header unterbinden. Ich hab das mal mit e.Cancel = True in der ColumnHeaderDoubleClick Event Routine versucht ... aber diese Einschaft it ReadOnly.

    LG
    Peter

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Peter329“ ()

    Peter329 schrieb:

    DoubleClick
    Da musst Du in der

    VB.NET-Quellcode

    1. Protected Overrides Sub WndProc(ByRef m As Message)
    2. MyBase.WndProc(m)
    3. End Sub
    die entsprechende Message abfangen und ignorieren, d.h. die BaseClass nicht aufrufen.
    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!
    Hi, danke erst mal. Aber irgendwie komme ich mit der Antwort nicht so recht klar.

    Ich hab die Überlagerung der WndProc mal so eingestellt. Das Ding feuert ja wie wild. Ich hab deshalb mal die Message "m" mit Debug.Print ausgegeben:

    Quellcode

    1. FormA: dgvFiles_ColumnHeaderMouseDoubleClick
    2. msg=0xf (WM_PAINT) hwnd=0x120826 wparam=0x0 lparam=0x0 result=0x0
    3. msg=0xe (WM_GETTEXTLENGTH) hwnd=0x120826 wparam=0x0 lparam=0x0 result=0x0
    4. msg=0xd (WM_GETTEXT) hwnd=0x120826 wparam=0x6 lparam=0x612e680 result=0x0


    Was sagt mir das jetzt. Ich habe keine Ahnung was ich jetzt abfragen soll und was ich dann veranlassen soll.

    Sorry, aber ich bin halt ein Landei!

    LG
    Peter
    @Peter329 Ich hab jetzt auf die Schnelle nicht gefunden, wie es funktioniert.
    Man kann dem Spy++ ein Fenster zuweisen, dann filtern, z.B. Mouse, und dann werden alle Messages aufgelistet.
    Da kannst Du identifizieren, welches die richtige Message ist / sind, die Du abfangen musst.
    ----
    Probier mal dies, da kommen mehrere Events:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub DataGridView1_RowHeaderMouseDoubleClick(sender As Object, e As DataGridViewCellMouseEventArgs) Handles DataGridView1.RowHeaderMouseDoubleClick
    3. MessageBox.Show("RowHeaderMouseDoubleClick")
    4. End Sub
    5. Private Sub DataGridView1_CellContentDoubleClick(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.CellContentDoubleClick
    6. MessageBox.Show("CellContentDoubleClick")
    7. End Sub
    8. Private Sub DataGridView1_CellMouseDoubleClick(sender As Object, e As DataGridViewCellMouseEventArgs) Handles DataGridView1.CellMouseDoubleClick
    9. MessageBox.Show("CellMouseDoubleClick")
    10. End Sub
    11. Private Sub DataGridView1_ColumnDividerDoubleClick(sender As Object, e As DataGridViewColumnDividerDoubleClickEventArgs) Handles DataGridView1.ColumnDividerDoubleClick
    12. MessageBox.Show("ColumnDividerDoubleClick")
    13. End Sub
    14. Private Sub DataGridView1_ColumnHeaderMouseDoubleClick(sender As Object, e As DataGridViewCellMouseEventArgs) Handles DataGridView1.ColumnHeaderMouseDoubleClick
    15. MessageBox.Show("ColumnHeaderMouseDoubleClick")
    16. End Sub
    17. End Class

    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!
    @fichz

    VB.NET-Quellcode

    1. If e.RowIndex = -1 Then Exit Sub


    Suuuuuuupiiiii ... mit dem CellDoubleClick Event und der Abfrage auf RowIndex = -1 kann man die Sache elegant lösen. Mein Programm flutsch ! Herzlichen Dank ...

    LG
    Peter

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Peter329“ ()