Select Case Menüeinträge Checked

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

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von tron25.

    Select Case Menüeinträge Checked

    Hallo,

    ich habe eine Menüleiste mit mehreren Menüpunkten. Unter Anderem gibt es den Menüpunkt "ToolsMenue". Dieser hat wiederum mehrere Unterpunkte, wie z.B. "RechteckMenue", "DreieckMenue", "PfeilMenue", usw.

    Gibt es eine Möglichkeit, mit einer "Select Case"-Auswahl herauszufinden, welcher Menüeintrag ausgewählt ist?

    VB.NET-Quellcode

    1. Select case ToolstripMenuitem.checked
    2. Case "RechteckMenue"
    3. 'Dann tue etwas
    4. Case "DreieckMenue"
    5. 'Dann tue etwas anderes
    6. '...
    7. End Select
    Für mich sind Menüs nur Ansammlungen von Buttons (wenn auch besonderer Art), und alle meine ButtonClicks kommen in eine einzige Methode, von der aus dann verteilt wird:

    VB.NET-Quellcode

    1. Private Sub AnyMenuItem_Click(sender As Object, e As EventArgs) Handles btForm1.Click, btForm2.Click, btDateInput.Click, btForm3.Click, btTuwas.Click, btTuwasAnderes.Click
    2. Select Case True
    3. Case sender Is btForm1 : Call (New Form1).ShowWindow()
    4. Case sender Is btForm2 : Call (New Form2).ShowAsDialog()
    5. Case sender Is btDateInput : Call (New diaDateInput).ShowDialog()
    6. Case sender Is btForm3 : Call (New Form3).Show()
    7. Case sender Is btTuwas : Tuwas(Me)
    8. Case sender Is btTuwasAnderes : TuwasAnderes()
    9. End Select
    10. End Sub

    Ich suche eine Möglichkeit, herauszufinden, welcher Menüeintrag angehakt ist. Je nach dem entsprechenden Menüeintrag soll dann etwas gemacht werden. Diese Funktion soll nicht direkt von einem Menüeintrag aus aufgerufen werden.

    So etwas Ähnliches wie:

    VB.NET-Quellcode

    1. Select Case Menüeinträge.IsChecked
    2. Case "RechteckMenue"
    3. 'Tue etwas
    4. Case "DreieckMenue"
    5. 'Tue etwas anderes
    6. End Select
    @tron25 Da mehrere Einträge gechecked sein können, musst Du sie alle einzeln abfragen:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. If ToolStripMenuItem2.Checked Then
    3. MessageBox.Show("ToolStripMenuItem2.Checked")
    4. End If
    5. If ToolStripMenuItem3.Checked Then
    6. MessageBox.Show("ToolStripMenuItem3.Checked")
    7. End If
    8. If ToolStripMenuItem4.Checked Then
    9. MessageBox.Show("ToolStripMenuItem4.Checked")
    10. End If
    11. End Sub
    Wenn nur ein einziger gecheckt ist, geht dies:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. Select Case True
    3. Case ToolStripMenuItem2.Checked
    4. MessageBox.Show("ToolStripMenuItem2.Checked")
    5. Case ToolStripMenuItem3.Checked
    6. MessageBox.Show("ToolStripMenuItem3.Checked")
    7. Case ToolStripMenuItem4.Checked
    8. MessageBox.Show("ToolStripMenuItem4.Checked")
    9. End Select
    10. 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!
    Du solltest dich dringend mit dem Thema Datentypen beschäftigen !
    Natürlich kann man keinen String mit einem Boolean vergleichen !
    Vielen Dank RodFromGermany.

    Irgendwie ist das etwas peinlich. Dein zweiter Vorschlag ist, was ich gesucht habe. Ich hätte auch selbst darauf kommen können, zumal ich eine ähnliche Select-Auswahl schon an einer anderen Stelle in meinem Programm verwendet habe.

    Vielen Dank an alle für eure Tipps und Ideen.