ShowDialog mit 3 Buttons

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

Es gibt 13 Antworten in diesem Thema. Der letzte Beitrag () ist von TRiViUM.

    ShowDialog mit 3 Buttons

    Lösung ist Ganz unten
    ShowDialog mit 3 Buttons
    Hallo Com,

    Ich versuche gerade ein Kleines Programm zu machen welches mir nach einem Doppelklick auf einen Eintrag eine neue Form öffnen soll welche 3 Buttons hat, (Anzeigen, Bearbeiten und Löschen)

    in meiner Mainfrm überprüfe ich den DialogResult. ich habe es derzeit etwas "Beschissen"
    btn_anzeigen = DialogResult.OK
    btn_bearbeiten = DialogResult.Retry
    btn_loeschen = DialogResult.Cancel

    komischerweise muss ich wen ich auf Löschen drücke 3 mal drücken bis die MsgBox kommt.

    Hier der Code:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Sub DGW1_CellDoubleClick(sender As Object, e As DataGridViewCellEventArgs) Handles DGW1.CellDoubleClick
    2. Using frmOption As New options
    3. If frmOption.ShowDialog() = DialogResult.OK Then
    4. 'MsgBox("Anzeigen")
    5. If e.RowIndex >= 0 Then
    6. ShowData(SelectData(e.RowIndex + 1))
    7. End If
    8. frmOption.Close()
    9. ElseIf frmOption.ShowDialog() = DialogResult.Retry Then
    10. MsgBox("Bearbeiten")
    11. frmOption.Close()
    12. ElseIf frmOption.ShowDialog() = DialogResult.Cancel Then
    13. MsgBox("Löschen")
    14. frmOption.Close()
    15. End If
    16. frmOption.Close()
    17. End Using
    18. End Sub


    Ist es mit den dialogen garnicht möglich mehr als 2 Buttons abfragen zu können oder mache ich etwas Falsch?

    Oder gibt es auch die möglichkeit den Button direckt zu überprüfen von der anderen Form? als ob auf der frmOption btn_bearbeiten gedrückt wurde?

    LG und Danke viel mals

    Edit: Bild Eingefügt

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

    @.Scare Du rufst 3x .ShowDialog() auf, also sollte das eig. deine Frage beantworten. Ruft einmal ShowDialog auf, speichere den Rückgabewert in einer Variable und überprüfe die auf den entsprechenden Wert. Wobei das ganze eher Suboptimal ist und wie von @TRiViUM angemerkt wurde, wäre ein ContextMenuStrip die elegantere Wahl.
    Dachte ich mir auch shcon, habe aber irgentwo gelesen das dies in meinem Falle nicht geht weil ich dan ja einen Rechtsklick auf einen Eintrag machen müsste im DGW. mit dem rechtsklick wird aber nichts makiert sondern nur per linksklick. oder wie meint ihr dies mit dem ContextMenuStrip ?
    Füg das mal in dein Code ein:

    VB.NET-Quellcode

    1. Private Sub DataGridView1_CellMouseDown(sender As Object, e As DataGridViewCellMouseEventArgs) Handles DataGridView1.CellMouseDown
    2. For Each c As DataGridViewCell In DataGridView1.SelectedCells
    3. c.Selected = False
    4. Next
    5. If e.Button = MouseButtons.Right Then
    6. DataGridView1.Item(e.ColumnIndex, e.RowIndex).Selected = True
    7. End If
    8. End Sub

    Damit selektiert er dir schonmal das Item, welches du mit Rechtsklick auswählst.
    klar, ändere einfach das Event des DGV's von CellMouseDown in CellMouseDoubleClick:

    VB.NET-Quellcode

    1. Private Sub DataGridView1_CellMouseDoubleClick(sender As Object, e As DataGridViewCellMouseEventArgs) Handles DataGridView1.CellMouseDoubleClick
    2. For Each c As DataGridViewCell In DataGridView1.SelectedCells
    3. c.Selected = False
    4. Next
    5. If e.Button = MouseButtons.Right Then
    6. DataGridView1.Item(e.ColumnIndex, e.RowIndex).Selected = True
    7. End If
    8. ContextMenuStrip1.Show(MousePosition.X, MousePosition.Y)
    9. End Sub

    VB.NET-Quellcode

    1. Select Case frmOption.ShowDialog()
    2. Case DialogResult.OK
    3. Case DialogResult.Cancel
    4. Case DialogResult.Retry
    5. End Select

    Sollte dein Problem beheben.

    Schau dir die Events vom DGV doch mal an.
    Soweit ich weiß gibts ein CellDoubleClick.

    Edit:
    Zu langsam sry.

    MfG Tim

    TRiViUM schrieb:

    klar, ändere einfach das Event des DGV's von CellMouseDown in CellMouseDoubleClick:

    VB.NET-Quellcode

    1. Private Sub DataGridView1_CellMouseDoubleClick(sender As Object, e As DataGridViewCellMouseEventArgs) Handles DataGridView1.CellMouseDoubleClick
    2. For Each c As DataGridViewCell In DataGridView1.SelectedCells
    3. c.Selected = False
    4. Next
    5. If e.Button = MouseButtons.Right Then
    6. DataGridView1.Item(e.ColumnIndex, e.RowIndex).Selected = True
    7. End If
    8. ContextMenuStrip1.Show(MousePosition.X, MousePosition.Y)
    9. End Sub

    Tip Top, dies geht in etwa der richtung wie dein Beispiel. Danke! wen es fertig ist und es so geht wie ich es mir dachte werde ich noch den Code von diesem abschnit hier Posten.

    Fortender schrieb:

    VB.NET-Quellcode

    1. Select Case frmOption.ShowDialog()
    2. Case DialogResult.OK
    3. Case DialogResult.Cancel
    4. Case DialogResult.Retry
    5. End Select

    Sollte dein Problem beheben.

    Schau dir die Events vom DGV doch mal an.
    Soweit ich weiß gibts ein CellDoubleClick.

    Edit:
    Zu langsam sry.

    MfG Tim

    Kein Ding, dies Hilft mir sicher weiter wen ich wider ein mal etwas machen möchte mit solch einem Dialog. Danke!
    So, hier meine Lösung die ich dank euch umsetzen konnte:

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Sub DGW1_CellDoubleClick(sender As Object, e As DataGridViewCellEventArgs) Handles DGW1.CellDoubleClick
    2. ContextMenuStrip1.Show(MousePosition.X, MousePosition.Y)
    3. End Sub
    4. Private Sub AnzeigenToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles AnzeigenToolStripMenuItem.Click
    5. If DGW1.CurrentRow.Index >= 0 Then
    6. ShowData(SelectData(DGW1.CurrentRow.Index + 1))
    7. End If
    8. End Sub



    nun werde ich nur noch die Subs für das Bearbeiten und löschen einsetzen und dann ist es fertig.

    Liebe grüsse und noch eine gute Nacht