DataGridView Klick ausserhalb der Zellen feststellen

  • VB.NET

Es gibt 21 Antworten in diesem Thema. Der letzte Beitrag () ist von TischlerMichi.

    DataGridView Klick ausserhalb der Zellen feststellen

    Hallo,

    ich habe ein Datagridview und möchte erreichen, dass wenn man auf den grauen Bereich klickt, wo keine Zellen sind, die Markierung entfernt wird. Wie kann ich Klicks in dem Bereich feststellen?

    Oder vielleicht anders gefragt, was wäre eine geschickte Möglichkeit, die Markierung zu entfernen?

    Ich hoffe, ihr versteht, was ich meine und würde mich über Tipps freuen

    Grüße

    Tobias
    If she IsNot here then sunshine = false

    MidiProgger76 schrieb:

    grauen Bereich ... Markierung
    Kannst Du da mal einen Screenshot schicken?
    Soll die Markierung beim Klick entfernt und dann wieder sichtbar gemacht werden?
    Soll sie ühaupt ausgeblendet werden?
    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 habe mal einen Schreenshot gemacht. Der graue Bereich gehört schon zu dem DataGridView. Aber wie stelle ich da Klicks fest?
    Bilder
    • markierung.jpg

      30,73 kB, 687×186, 187 mal angesehen
    If she IsNot here then sunshine = false

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „MidiProgger76“ () aus folgendem Grund: Bild upload korrigiert.

    MidiProgger76 schrieb:

    Schreenshot
    Nutze bitte die Forums-Dateianhang-Funktionalität:
    Erweiterte Antwort => Dateianhänge => Hochladen
    Bitte editiere Deinen Post entsprechend.
    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!
    Also, es gibt da entsprechende Ereignisse. Ich kann dann da die Anweisung geben, die Markierung aufzuheben. Das Problem ist aber, dass die Markierung auch dann aufgehoben wird, wenn ich eine Zelle anklicke. Aber da soll das nicht passieren.
    If she IsNot here then sunshine = false
    @MidiProgger76

    RodFromGermany schrieb:

    Nutze bitte die Forums-Dateianhang-Funktionalität:
    Erweiterte Antwort => Dateianhänge => Hochladen
    Bitte editiere Deinen Post entsprechend.
    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!
    @MidiProgger76 Das ist echt blöd, da das DataGridView.Click-Event vor dem DataGridView.CellClick-Event geworfen wird. Wäre es anders herum, wäre das kein Problem. :/

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private anzahl As Integer = 0
    3. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    4. anzahl = 0
    5. End Sub
    6. Private Sub DataGridView1_Click(sender As Object, e As EventArgs) Handles DataGridView1.Click
    7. anzahl += 1
    8. Console.WriteLine("DataGridView.Click " & anzahl)
    9. End Sub
    10. Private Sub DataGridView1_CellClick(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.CellClick
    11. anzahl += 1
    12. Console.WriteLine("DataGridView.CellClick " & anzahl)
    13. End Sub
    14. 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!
    Ja, das ist wirklich blöd. Es könnte so schön sein ;) Ich habe bis jetzt die Lösung, dass ich die Markierung per Kontextmenü lösche, aber so richtig gefallen will mir das nicht.
    If she IsNot here then sunshine = false

    MidiProgger76 schrieb:

    Markierung per Kontextmenü
    Ich hab es gefunden:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private anzahl As Integer = 0
    3. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    4. anzahl = 0
    5. End Sub
    6. Private Sub DataGridView1_Click(sender As Object, e As EventArgs) Handles DataGridView1.Click
    7. anzahl += 1
    8. Console.WriteLine("DataGridView.Click " & anzahl)
    9. End Sub
    10. Private Sub DataGridView1_CellClick(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.CellClick
    11. anzahl += 1
    12. Console.WriteLine("DataGridView.CellClick " & anzahl)
    13. End Sub
    14. Private Sub DataGridView1_MouseClick(sender As Object, e As MouseEventArgs) Handles DataGridView1.MouseClick
    15. Console.WriteLine("DataGridView.MouseClick " & anzahl)
    16. If anzahl = 1 Then
    17. DataGridView1.ClearSelection()
    18. End If
    19. anzahl = 0
    20. End Sub
    21. 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!
    Zunächst mal danke für die Mühe, aber irgendwie bekomme ich nicht das Gewünschte hin. Habe übrigens noch festgestellt, dass cellclick nur ausgeführt wird, wenn man eine einzelne Zelle anklickt. Bei einer Markierung von mehreren wird das Ereignis nicht ausgelöst.

    Ich glaube, ich mache erstmal Pause ;) Immerhin kann man die Markierung irgendwie löschen, wenn auch nicht ganz so schön.
    If she IsNot here then sunshine = false
    Hallo Midi

    ich glaub so get's am einfachsten.



    Quellcode

    1. Private Sub DGVAngebote_MouseDown(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles DGVAngebote.MouseDown
    2. If Me.DGVAngebote.Rows(Me.DGVAngebote.RowCount - 1).Height * Me.DGVAngebote.RowCount - 1 + Me.DGVAngebote.ColumnHeadersHeight < e.Y Then
    3. Me.DGVAngebote.ClearSelection()
    4. End If
    5. End Sub

    MidiProgger76 schrieb:

    Bei einer Markierung von mehreren wird das Ereignis nicht ausgelöst.
    Bei mir schon.
    Mach ein neues Projekt mit Button und DGV, gib dem DGV ein paar Spalten, starte, fülle ein paar Zeilen, markiere ein paar davon und klicke in den grauen Bereich. => Markierung weg.

    TischlerMichi schrieb:

    ich glaub so get's am einfachsten.
    Lies bitte zunächst die Problemstellung durch, bevor Du hier Lösungen postest. ;)
    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!

    TischlerMichi schrieb:

    oder was hab ich jetzt nicht verstanden
    :?:
    @MidiProgger76 möchte ein Zellitem - DGV-Hintergrund - selektives MouseDown.
    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:

    TischlerMichi schrieb:

    oder was hab ich jetzt nicht verstanden
    :?:
    @MidiProgger76 möchte ein Zellitem - DGV-Hintergrund - selektives MouseDown.


    Alse jetzt noch mal langsam aber ich glaube doch das genau das gemeint ist.

    VB.NET-Quellcode

    1. Private Sub DGVTest_MouseDown(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles DGVTest.MouseDown
    2. If Me.DGVTest.Rows(Me.DGVTest.RowCount - 1).Height * Me.DGVTest.RowCount - 1 + Me.DGVTest.ColumnHeadersHeight < e.Y Then
    3. Me.DGVTest.ClearSelection()
    4. End If
    5. End Sub