Fragen zum Addhandler

  • VB.NET

Es gibt 27 Antworten in diesem Thema. Der letzte Beitrag () ist von Niko Ortner.

    Fragen zum Addhandler

    Guten Abend an die HelferLine :)
    Ich möchte nochmal ein paar Fragen zum AddHandler, AddressOf stellen.

    Ich habe ein MenuItem, welches ich im FormLoad-Event hinzufügen. Wenn ich dieses dann betätige, soll eine MsgBox erscheinen! Ich weiß, dass ich mit

    VB.NET-Quellcode

    1. Private WithEvents menuitem As New MenuItem

    arbeiten muss.

    Anschließend muss ich das Item in eine Variable packen. Leider weiß ich nun nicht mehr weiter ;(
    Warum machste dat nich im Designer? Gibts dazu irgendeinen wirklich sinnvollen grund?
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private WithEvents mItem As New MenuItem
    2. Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    3. AddHandler mItem.Click, AddressOf mItem_click
    4. End Sub
    5. Private Sub mItem_click(ByVal sender As System.Object, ByVal e As System.EventArgs)
    6. MsgBox("Glückwunsch - U won a Keks")
    7. End Sub
    Guten Morgen, FloFuchs :)

    Ich habe nun ff. Code geschrieben:
    ...der Code

    VB.NET-Quellcode

    1. Private WithEvents mItem As New MenuItem
    2. Private Sub TestForm_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    3. AddHandler mItem.Click, AddressOf mItem_Click
    4. mItem.Text = "löschen"
    5. AnsprechpartnerToolStripMenuItem.DropDownItems.Add(mItem.Text)
    6. End Sub
    7. Private Sub mItem_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles mItem.Click
    8. MsgBox("TEST")
    9. End Sub


    So richtig will es nicht gelingen! Beim Click auf das mItem öffnet sich keine MsgBox :S
    Kannst du mir vielleicht nochmal erklären, was ich falsch gemacht habe?

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

    VB.NET-Quellcode

    1. Private Sub mItem_Click(ByVal sender As Object, ByVal e As System.EventArgs)
    2. MsgBox("TEST")
    3. End Sub
    Ohne Handles mItem.Click
    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 es jetzt wie folgt probiert:

    VB.NET-Quellcode

    1. Private WithEvents mItems As New MenuItem
    2. Private Sub TestForm_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    3. AnsprechpartnerToolStripMenuItem.DropDownItems.Add("löschen")
    4. AddHandler mItems.Click, AddressOf mItem_Click
    5. Dim g As Graphics = ComboBox2.CreateGraphics()
    6. Dim Breite, MaxBreite As Single
    7. For Each Element In ComboBox2.Items
    8. Breite = g.MeasureString(Element.ToString, ComboBox2.Font).Width
    9. If Breite > MaxBreite Then MaxBreite = Breite
    10. Next
    11. ComboBox2.Width = CInt(MaxBreite) + 20
    12. ComboBox4.Width = CInt(MaxBreite) + 20
    13. End Sub


    VB.NET-Quellcode

    1. Private Sub mItem_Click(ByVal sender As Object, ByVal e As System.EventArgs)
    2. MsgBox("mItem geklickt :)")
    3. End Sub


    Leider funktioniert auch hier der gewünschte Effekt nicht. Die MessageBox wird nicht angezeigt? Ich hab den AddHandler auch schon an erster Stelle geschrieben, was jedoch keine Änderung herbeiführt :(
    Zeile 1: du deklarierst mItems
    Zeile 4: du fügst den Handler hinzu
    ganz unten die Ereignisprozedur. Nur: Wo fügst du das Menuitem selbst irgendwo hinzu?

    Du deklarierst nur, und verwendest es nicht. (Der Punkt, der in Zeile 3 hinzugefügt wird, hat hingegen keinen Handler.)
    Ich habe es auch nachbenannt probiert, was jedoch nichts geändert hat ;(

    VB.NET-Quellcode

    1. AddHandler mItems.Click, AddressOf mItem_Click
    2. mItems.Text = "löschen"
    3. AnsprechpartnerToolStripMenuItem.DropDownItems.Add(mItems.Text)

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

    VB.NET-Quellcode

    1. AnsprechpartnerToolStripMenuItem.DropDownItems.Add(mItems.Text)

    Ohne mir das Beispiel noch genauer anzusehen: Warum definierst du ein Item, wenn du hier lediglich den Text hinzufügst?
    Definiere ein Item, ändere die Eigenschaften nach Belieben, füge den Handler hinzu, füge das Element hinzu==> ...DropDownItems.Add(mItems)

    VB.NET-Quellcode

    1. AnsprechpartnerToolStripMenuItem.DropDownItems.Add(mItems.Text)
    genau angugge - was wird da geadded?
    Es wird nicht das mItems geadded, sondern dessen Text.
    So ein Text ist aber nur ein dummer String - der wird bestimmt kein Klick-Event auslösen ;)

    Klicks mal auf das "Add" und drücke Shift-F2 - das bringt dich in den ObjectBrowser/ObjektKatalog und zeigt dir genau die Methode an, die du da verwendest.
    Mach Dir testweise ein Menü im Designer und sieh Dir an, wie es vom Automaten aufgebaut wird.
    Das musst Du nachempfinden.
    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 ein komplettes MenuStrip konnte ich erfolgreich zeichnen, dazu auch das MenuItem.
    ....hier der Code

    VB.NET-Quellcode

    1. Dim ms As New MenuStrip()
    2. Dim tsi As ToolStripMenuItem = ms.Items.Add("Test")
    3. tsi.DropDownItems.Add("Click")
    4. AddHandler tsi.DropDownItems(0).Click, AddressOf item_Click
    5. Me.Controls.Add(ms)

    VB.NET-Quellcode

    1. Private Sub item_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles item.Click
    2. MsgBox("Click :D")
    3. End Sub

    Es funktioniert wunderbar. Leider schaffe ich es aber nicht, das neue Item meines vorhandenen MenuStrips hinzuzufügen in den AddHandler zu packen :(
    Gib bitte mal Deinem Programm Option Strict On und präzisiere die Deklaration.
    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!

    FreShmaKer schrieb:

    OptionStrictOn habe ich eingestellt
    :S
    Bilder
    • Strict.jpg

      31,25 kB, 1.006×126, 160 mal angesehen
    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 liegt daran, dass ich den Code nicht mehr stehen habe :)
    Ich habe ihn zwischenzeitlich herausgenommen, damit ich an anderer Stelle der Form weiterarbeiten kann.


    OptionStrictOn hat aber an 2 Stellen was zu "schimpfen" gehabt und dem hab ich mich zunächst angenommen :)

    Sorry, aber ich finde meine Denkfehler nicht! Was mache ich denn falsch? ;(

    VB.NET-Quellcode

    1. AnsprechpartnerToolStripMenuItem.DropDownItems.Add('hier muss mein Item hin)
    Poste mal bitte in sich vollständigen Code, sonst kann ich nix nachvollziehen. Und geratenen Code willste ja nich haben. :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!

    RodFromGermany schrieb:

    Poste mal bitte in sich vollständigen Code, sonst kann ich nix nachvollziehen.


    VB.NET-Quellcode

    1. Private WithEvents mItem As New MenuItem
    2. Private Sub TestForm_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    3. Dim item As New MenuItem()
    4. item.Text = "löschen"
    5. AnsprechpartnerToolStripMenuItem.DropDownItems.Add(item)
    6. AddHandler item, AddressOf item_Click


    Nun habe ich mich noch mehr durcheinander bringen lassen. Ich weiß gerade wirklich nicht mehr weiter!
    Wo ist mein Denkfehler? Ich muss doch das Item erstmal erstellen, wozu ich am besten eine Variable nutze. Dann muss ich es dem StripMenu einfach hinzufügen. Oder?
    Hey.

    machs mal folgendermaßen:

    VB.NET-Quellcode

    1. Private WithEvents mItem As New MenuItem
    2. Private Sub TestForm_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    3. Dim item As New MenuItem()
    4. item.Text = "löschen"
    5. AnsprechpartnerToolStripMenuItem.DropDownItems.Add(item)
    6. AddHandler mItem.click, AddressOf item_Click
    7. Private Sub item_Click
    8. messagebox.show("TEXT")
    9. End sub