Datagridview rechtsklick

  • VB.NET

Es gibt 20 Antworten in diesem Thema. Der letzte Beitrag () ist von hal2000.

    Datagridview rechtsklick

    Hi!

    Ich habe ien Datagridview!

    So:

    VB.NET-Quellcode

    1. Private Sub DataGridView1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles DataGridView1.MouseDown
    2. If e.Button = Windows.Forms.MouseButtons.Right Then
    3. Me.ContextMenuStrip2.Show()
    4. Me.ContextMenuStrip2.Top = Control.MousePosition.Y
    5. Me.ContextMenuStrip2.Left = Control.MousePosition.X
    6. End If
    7. End Sub

    so öffnet sich bei einem rechtsklick ein Contexmenü!

    nur leider wenn ich auf eine NICHT Selektierte Teile rechts Klicke wird diese nicht aktiv (nur blau markiert)
    Wie kann ich die Zeile richtig ansprechen? damit ich auch die darin befindlichen Werte benutzen kann?
    Gehe in den Designer und wähle in Deinem DGV mit der Eigenschaft
    ContextMenuStrip
    Dein ContextMenu aus und entferne Deinen Mouse-Handler.
    Feritg. :D
    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 denke mal, dass die rechte Maustaste hier nicht zum Selektieren, sondern für das Contextmenü da ist.
    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!
    Nachfrage wegen Verständnis:
    Willst Du rauskriegen, welche Zelle markiert ist, wenn Du mit links draufklickst?
    Da musst Du ein anderes Event nehmen:

    VB.NET-Quellcode

    1. Private Sub DataGridView1_CellContentClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellContentClick
    2. Dim row As Integer = e.RowIndex
    3. Dim col As Integer = e.ColumnIndex
    4. End Sub
    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:

    Nachfrage wegen Verständnis:
    Willst Du rauskriegen, welche Zelle markiert ist, wenn Du mit links draufklickst?
    Da musst Du ein anderes Event nehmen:

    VB.NET-Quellcode

    1. Private Sub DataGridView1_CellContentClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellContentClick
    2. Dim row As Integer = e.RowIndex
    3. Dim col As Integer = e.ColumnIndex
    4. End Sub

    hmmm durch linkes klicken auf einer Zeile im Datagridview sollen die Werte aus dieser Zeile in Textboxen stehen - also im weitersten Sinn: ja
    Suchst Du etwas in dieser Art:

    VB.NET-Quellcode

    1. Private Sub DataGridView1_CellContentClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellContentClick
    2. Dim row As Integer = e.RowIndex
    3. Dim col As Integer = e.ColumnIndex
    4. If (row < 0 OrElse col < 0) Then
    5. Return
    6. End If
    7. TextBox1.Text = DataGridView1.Item(col, row).Value.ToString
    8. End Sub

    Es gibt eine ganze Reihe von Events wie CellClick, CellContentClick, CellContentDoubleClick usw.
    Da musst Du mal probieren, welcher der für Dich richtige ist.
    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!
    Meines wissen reagieren alle diese Ereignisse nur auf einen Linksklick, nicht aber auf einen Rechtsklick. Müsste man allergins trotzdem noch ausprobieren. Kann keine Garantuie geben :)

    lg.

    LucaWelker
    lg.

    LucaWelker

    LucaWelker schrieb:

    Meines wissen reagieren alle diese Ereignisse nur auf einen Linksklick, nicht aber auf einen Rechtsklick.

    Das ist korrekt.
    Der Rechtsklick ist eben dem Kontextmenü vorbehalten.
    Frage an @vierkant:
    Willst Du das Windows-Standard-Regime diesbezüglich ändern?
    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:

    LucaWelker schrieb:

    Meines wissen reagieren alle diese Ereignisse nur auf einen Linksklick, nicht aber auf einen Rechtsklick.

    Das ist korrekt.
    Der Rechtsklick ist eben dem Kontextmenü vorbehalten.
    Frage an @vierkant:
    Willst Du das Windows-Standard-Regime diesbezüglich ändern?

    nun es geht darum das sich bei nem Rechtsklick ein Kontexmenü öffnet - in diesem befindet sich zB.: "Löschen" und dann sollte die jeweilige Zeile aus dem Datagrid gelöscht werden
    Öffne das Notepad, schreibe mehrere Zeilen rein, markiere eine und klicke mit rechts auf eine andere.
    Die Selektierung bleibt erhalten. Das ist Windows Standard.
    Überlege Dir, ob Du ein Programm erstellen willst, das sich nicht wie ein Windows-Programm verhält.
    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!
    Das stimmt schon!

    Aber wenn eine Zelle mit der linken selektiert wurde. Und ich klicke mit der rechten in eine andere wird diese auch blau markiert - leider werden aber die Werte von der vorhergehenden Zelle übernommen!

    Kann ich es irgendwie ausschalten das sich die Zeile durch den rechts klick selektieren (also Blau markiert) lässt?
    Aber wenn eine Zelle mit der linken selektiert wurde. Und ich klicke mit der rechten in eine andere wird diese auch blau markiert - leider werden aber die Werte von der vorhergehenden Zelle übernommen!

    Wenn du einzelne Zeile markieren willst dann muß MultiSelect Eigenschaft von Datagridview abschalten: msdn.microsoft.com/de-de/libra…gridview.multiselect.aspx


    Hier änliche Frage: entwickler-forum.de/showthread.php?t=40622

    Schau dir CellContextMenuStripNeeded Event von Datagridview genauer an: msdn.microsoft.com/de-de/libra…pneeded%28v=vs.80%29.aspx

    Die Lösung

    Da ich gerade per Google nach einer Lösung für genau das gleiche Problem gesucht habe und hier gelandet bin, möchte ich meine Lösung zu diesem Thema beitragen.

    Ich habe mir per Mouseover eine Hover-Selection erstellt und dem Datagridview in den Eigenschaften (ContextMenüStrip) mein Rechtsklickmenü festgelegt.

    Das ganze sieht dann so aus:

    VB.NET-Quellcode

    1. ' Die Hover-Selection
    2. Private Sub DataGridView1_CellMouseEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellMouseEnter
    3. DataGridView1.Rows(e.RowIndex).Selected = True
    4. End Sub



    VB.NET-Quellcode

    1. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    2. DataGridView1.ContextMenuStrip = ContextMenuStrip1
    3. End Sub



    Damit klappt's bei mir super, zwar springt der kleine schwarze Pfeil nicht mit, aber die Zelle ist dennoch als selektiert gekennzeichnet und kann folgendermaßen abgefragt werden:

    VB.NET-Quellcode

    1. Private Sub MeinToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MeinToolStripMenuItem.Click
    2. Dim str As String = DataGridView1.SelectedRows(0).Cells(0).Value
    3. MsgBox(str)
    4. End Sub



    Gruß Hassowuff

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