Kontextmenü: Ausgewähltes DropDownItem ermitteln

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

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von SebaMair.

    Kontextmenü: Ausgewähltes DropDownItem ermitteln

    Hallo allerseits! Ich arbeite an einem Programm, das eine längere Textdatei zeilenweise ausliest und für jede Zeile ein DropDownItem im Kontextmenü mit dem ausgelesenen Text erstellt. Wie kann ich nun feststellen, welches DropDownItem ausgewählt wurde, und dessen Text als String ausgeben?
    Das DropDownItem sendet doch das Click-Event - also der sender, der da übergeben wird, der ist das DropDownItem, was du suchst.



    Allerdings stelle ich mir dein Menü unbenutzbar vor: Angenommen, deine "längere" Textdatei hat 200 Zeilen (das wäre ja noch sehr kurz) - dann ergäbe sich ein Menü mit 200 DropDownItem - völlig unbenutzbar!
    @SebaMair Das waren doch die dynamisch erstrellten Items.
    Du musst per

    VB.NET-Quellcode

    1. AddHandler DEIN_ITEM.Click AddressOf(DEIN_EVENTHANDLER)
    Deinem Item zunächst einen vorhandenen Eventhandler zuweisen und kannst dort, wie der @ErfinderDesRades schrieb, aus dem Sender das Item zurückholen.
    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!
    Danke erstmal, doch so recht komme ich mit dem Problem nicht zurecht...
    Das Programm liest eine Textdatei mit 20-30 Zeilen aus, in jeder ein Sonderzeichen, und erstellt für jede Zeile ein Dropdownitem im Contextmenustrip. Da die Textdatei häufig geändert wird und die Zeilenanzahl und -reihenfolge flexibel ist, suche ich eine Möglichkeit, ganz generell den Text des angeklickten Dropdownitems auszulesen.
    @SebaMair Gib dem Item eine entsprechende Tag-Property zur Unterscheidung.
    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!
    @SebaMair Kommt ühaupt ein Event in Deinem Programm an?
    ===
    @SebaMair Ich denke mal, dass Du auch kein WithEvents hast.

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Shared index As Integer = 0
    3. Dim WithEvents item As ToolStripMenuItem
    4. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    5. item = New ToolStripMenuItem
    6. item.Tag = index
    7. item.Text = "bla " & index
    8. AddHandler item.Click, AddressOf TestToolStripMenuItem_Click
    9. Me.ContextMenuStrip1.Items.Add(item)
    10. index += 1
    11. End Sub
    12. Private Sub TestToolStripMenuItem_Click(sender As Object, e As EventArgs)
    13. Dim item = CType(sender, ToolStripMenuItem)
    14. Me.Label1.Text = item.Tag.ToString()
    15. End Sub
    16. 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!

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

    RodFromGermany schrieb:

    Dim WithEvents item As ToolStripMenuItem


    WithEvents wird nur gebraucht, wenn der Rumpf so aussieht

    VB.NET-Quellcode

    1. Private Sub TestToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles item.Click
    2. end Sub


    Bei Verwendung von

    RodFromGermany schrieb:

    AddHandler item.Click, AddressOf TestToolStripMenuItem_Click

    reicht dieser Rumpf.

    VB.NET-Quellcode

    1. Private Sub TestToolStripMenuItem_Click(sender As Object, e As EventArgs)
    2. End Sub



    Freundliche Grüsse

    exc-jdbi
    Willst du das Ding als Item bekommen oder reicht dir der ausgewählte Text?
    Text ist überhaupt keine große Angelegenheit, da kannst du .Text nutzen:

    VB.NET-Quellcode

    1. Option Strict On
    2. Option Explicit On
    3. Public Class Form1
    4. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    5. MessageBox.Show(MyDropDown.Text)
    6. End Sub
    7. End Class


    LG
    Bitte benutze OPTION STRICT ON.
    Und optional OPTION EXPLICIT ON.
    Hier ein CODE-CONVERTER.

    Suchanfragen-Ansatz für GOOGLE.
    Prüfe deinen Beitrag in einer RECHTSCHREIBPRÜFUNG.

    exc-jdbi schrieb:

    Freundliche Grüsse
    Dann wird es so:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Shared index As Integer = 0
    3. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    4. Dim item = New ToolStripMenuItem
    5. item.Tag = index
    6. item.Text = "bla " & index
    7. AddHandler item.Click, AddressOf TestToolStripMenuItem_Click
    8. Me.ContextMenuStrip1.Items.Add(item)
    9. index += 1
    10. End Sub
    11. Private Sub TestToolStripMenuItem_Click(sender As Object, e As EventArgs)
    12. Dim item = CType(sender, ToolStripMenuItem)
    13. Me.Label1.Text = item.Tag.ToString()
    14. End Sub
    15. 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!