DatagridView Edit Mode mit MouseButton.Right beenden

  • VB.NET

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

    DatagridView Edit Mode mit MouseButton.Right beenden

    Hi,

    Wie der Titel schon sagt, möchte ich den Edit Mode durch Klicken des MouseButton.Right beenden.

    Dazu muss ich zunächst das Default Context Menu los werden ... und dann richte ich einen Event Handler ein, der den MouseClick abfängt. So habe ich das versucht:


    VB.NET-Quellcode

    1. Private Sub DgvDictionary_EditingControlShowing(sender As Object,
    2. e As DataGridViewEditingControlShowingEventArgs) Handles DgvDictionary.EditingControlShowing
    3. 'Remove default context menu
    4. e.Control.ContextMenu = New ContextMenu
    5. If TypeOf e.Control Is DataGridViewTextBoxEditingControl Then
    6. RemoveHandler DirectCast(e.Control, DataGridViewTextBoxEditingControl).MouseClick,
    7. AddressOf Edit_MouseClick
    8. AddHandler DirectCast(e.Control, DataGridViewTextBoxEditingControl).MouseClick,
    9. AddressOf Edit_MouseClick
    10. End If


    Die Routine zum Behandeln des MouseClick, sieht dann wie folgt aus:

    VB.NET-Quellcode

    1. Private Sub Edit_MouseClick(sender As Object, e As MouseEventArgs) 'Called by Editmode handler
    2. Debug.Print("EditMouseClick " & e.Button.ToString)
    3. If e.Button = MouseButtons.Right Then DgvDictionary.EndEdit()
    4. End Sub



    Leider "fängt" die Routine nur die LINKE Maus Taste ... wenn ich die rechte Maustaste drücke, feuert die EventRoutine nicht !

    EditMouseClick Left
    EditMouseClick Left
    EditMouseClick Left

    Was mache ich denn falsch ? Hier fehlt mir offensichtlich eine wichtige Information ! Ich könnte mir vorstellen, dass meine Technik zum Deaktivieren des ContextMenu nicht adäquat ist ... und dass dadurch der MouseClick.Right verloren geht.

    Irgendwelche Ideen, wie ich das handhaben kann?

    Die Linke Maustaste kann ich leider nicht zum Beenden verwenden ... die wird anderweitig gebraucht.

    LG
    Peter

    Peter329 schrieb:

    Dazu muss ich zunächst das Default Context Menu los werden
    Setze die Property ContextMenu zu Nothing.
    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!

    'RodFromGermany schrieb:

    Setze die Property ContextMenu zu Nothing.


    VB.NET-Quellcode

    1. 'Remove default context menu
    2. e.Control.ContextMenu = Nothing 'New ContextMenu


    Das hatte ich schon versucht - aber damit kann man das Context Menu nicht ausschalten, das poppt unverändert auf, wenn man MouseButton.Right drückt.
    Bei mir klappt Dein Code, wenn ich beim Ent- und Wiederkoppeln statt des MouseClick-Events das MouseUp-Event verwende.
    Spoiler anzeigen
    Private Sub DataGridView1_EditingControlShowing(sender As Object, e As DataGridViewEditingControlShowingEventArgs) Handles DataGridView1.EditingControlShowing
    e.Control.ContextMenu = New ContextMenu
    If TypeOf e.Control Is DataGridViewTextBoxEditingControl Then
    RemoveHandler DirectCast(e.Control, DataGridViewTextBoxEditingControl).MouseUp,
    AddressOf Edit_MouseClick
    AddHandler DirectCast(e.Control, DataGridViewTextBoxEditingControl).MouseUp,
    AddressOf Edit_MouseClick
    End If
    End Sub

    Private Sub Edit_MouseClick(sender As Object, e As MouseEventArgs) 'Called by Editmode handler
    Debug.Print("EditMouseClick " & e.Button.ToString)
    If e.Button = MouseButtons.Right Then DataGridView1.EndEdit()
    End Sub

    VB.NET-Quellcode


    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.