Kontrollieren, welches MenuStripItem als letztes gedrückt wurde

  • VB.NET

Es gibt 24 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Kontrollieren, welches MenuStripItem als letztes gedrückt wurde

    Hallo Leute,

    ich bin gerade am basteln, und jetzt stell ich mir die Frage, wie ich herausfinde, welches MenuStripItem als letztes gedrückt wurde.
    Der Hintergrund ist, dass jedes MenuStripItem auf den selben Code zugreift (Dies ist leider nicht umgänglich, würde jetzt aber ziehmlich weit aushohlen müssen es zu erklären warum :)).
    Dieser Code soll jetzt irgentwie herausfinden, welches Item gedrückt wurde. Dieses Item ist so gesehen das letzte Item was gedrückt wurde, und auch dass, welches den Code aufruft. So sollte es also möglich sein dies herauszufinden. Leider hab ich keine Ahnung wie...

    Ich hoffe, ihr könnt mir helfen :)


    Mit freundlichen Grüßen
    Mit freundlichen Grüßen



    GVI (Teil1/2): 80%
    Als erstes ist eines besonders wichtig: Option Strict On Damit wirst du über Fehler und deren Behebung sofort informiert.

    Dann: Jedes Event gibt eine Eigenschaft sender als Object mit. Sender enthält also das geklickte, gedrückte oder wie auch immer gerade behandelte Object, ob Button MenustripItem oder, oder.
    Das Problem ist, dass du zunächst herausfinden mußt, ob dieses Object vom gewünschten Typ ist:

    VB.NET-Quellcode

    1. If TypeOf(sender) is Button Then
    2. 'Ja es ist ein Button, hier Casten
    3. End If

    Dann gehst du daran, das Object in den gewünschten Typ zu Casten:

    VB.NET-Quellcode

    1. Dim GedrückterButton = DirectCast(Sende, Button)

    Um Objecte gleichen Typs auseinanderzuhalten, verwende die Eigenschaft Name des Controls:

    VB.NET-Quellcode

    1. Select Button.Name
    2. Case "Elisabet"
    3. 'Tu dieses
    4. Case "Johann"
    5. 'Tu jenes
    6. Case Else
    7. 'Meckermeldung
    8. End Select
    :thumbsup: Seit 26.Mai 2012 Oppa! :thumbsup:
    Danke für die schnell Antwort, und dieses werde ich mir gleich merken, da ich es sicher bald mal wieder brauche :thumbup:

    Jedoch kann der User selbst Items Hinzufügen, und somit kann die Menge der Items variieren. Gibt es da trotsdem eine Lösung? Oder kann man das Case mit einer 'for'-Schleife verknüpfen, und somit alle einmal durchgehen?

    Ich hoffe ihr könnt mir auch mit den erschwärten Regeln helfen :)

    Mit freundlichen Grüßen
    Mit freundlichen Grüßen



    GVI (Teil1/2): 80%
    Beim Dünamischen Hinzufügen der Items darfste dann aba nich AddHandler vorgessen, damit du aufs richtige Event-Sub zeigst und musst dem hinzugefügten Item halt nen aussagekräftigen Namen (mit Index verknüpft z.B.) oder eventuell benötigte Daten (einen Link oda ne Nummer) in der Tag-Eigenschaft des Controls mitgebn.

    ErfinderDesRades schrieb:

    fragichmich, wozu du sie überhaupt unterscheiden willst?
    Ich mir auch, aber nach ner halben Pulle Roten und nem Blick in die Kristallkuller könnte er Links (Favoriten) oder so hinzufügen wollen oder so...

    Fiel Fergnügen

    Vatter

    Edit: Fielleicht is das Forhaben auch GEHEIM!
    (Boah, ich sollte ins Bett gehen und den letzten Urlaubsabend genießen..
    :thumbsup: Seit 26.Mai 2012 Oppa! :thumbsup:
    Deine Kristallkuller lügt nicht :)

    Nun, ich checkst trotsdem nicht... ;(

    Hintergrund: Ich erstelle ein Item, wo alle auf Methode zugreiften. Nun, wenn man auf ein Item drück, sollte der Name dieses Items in der Textdatei suche. (letzteres hab ich aber schon). Dies bringt mir, dass man Webseiten abspeichern kann, und wenn man dann auf das erstellte Item dieser Webseite drückt, soll die Webseite aufgerufen werden, und automatisch eingeloggt werden.

    Ach ja, wenn das ganze so leicht wäre...


    Mit freundlichen Grüßen
    Mit freundlichen Grüßen



    GVI (Teil1/2): 80%
    Dann mach Dir vllt. ein Dictionary(Of String, String) oder Dictionary(Of Button, String), wo Du diese Verknüpfung ablegen kannst.
    Dann kannst Du die doppelten Verursacher löschen und den neuen anhängen, der letzte ist dann immer der neueste.
    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!
    Kuul, im Wein liegt also wirklich Wahrheit.

    lurker schrieb:

    Ich erstelle ein Item, wo alle auf Methode zugreiften
    Diese Architektur versteh ich noch nicht ganz. Nicht die Methoden sollen auf ein Item zugreifen. Deine Items haben doch ein Klick-Event. In diesem Event ermittelst du, welcher Item geklickert wurde, suchst den zugehörigen Eintrag in deiner Linkliste und Navigierst dann deinen Browser auf die Webseite.
    Die Linkliste sollte, wie @RodFromGermany schon vorschlug, eine Dictionary sein. Da kannst du den Namen des Links (z.B. "VB-Forum") als Key und den zugehörigen Link (z.B. vb-paradise.de) als Value speichern. Das ermöglicht den einfachen Zugriff auf den Value über die Angabe des Keys ohne Schleife usw.
    Beim Programmstart werden halt die Daten (Key und Value) in die Dictionary geladen (schau alternativ zur Textdatei mal nach serialisieren und deserialisieren) und die Items hinzugefügt und das Klick-Event mit AddHandler deiner Klick-EventSub zugewiesen.
    Damit wäre der Kreis geschlossen.

    Fiel Fergnügen

    Vatter
    :thumbsup: Seit 26.Mai 2012 Oppa! :thumbsup:
    Nun nach längerm googlen, bin ich auf den entschluss gekommen, dass ich überhaup keine Ahnung hab. ;(
    So, bitte noch mal langsam der Addhandler tu was, und was der Klick-EventSub macht?

    Ich mach das normalerweise nicht, aber könntest du mir mal einen kurzen code auschnitt geben?

    Ich glaub, dieses Problem macht mich ganz... :cursing:

    Mit freundlchen Grüßen
    Mit freundlichen Grüßen



    GVI (Teil1/2): 80%
    Vielleicht genügt Dir das, vom System generierte Namen:

    VB.NET-Quellcode

    1. Private Sub ToolStripMenuItem_Click(sender As System.Object, e As System.EventArgs) Handles BbbToolStripMenuItem.Click, CccToolStripMenuItem.Click, DddToolStripMenuItem.Click
    2. If sender Is BbbToolStripMenuItem Then
    3. MessageBox.Show("BbbToolStripMenuItem")
    4. ElseIf sender Is CccToolStripMenuItem Then
    5. MessageBox.Show("CccToolStripMenuItem")
    6. ElseIf sender Is DddToolStripMenuItem Then
    7. MessageBox.Show("DddToolStripMenuItem")
    8. End If
    9. End Sub
    Bilder
    • menu.jpg

      5,54 kB, 188×161, 277 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!
    Der Name der Item kann aber durch denn User ausgewählt werden. Der User kann es aber z.B.: "hallo" oder "IrgentEinName" nennen.

    Somit kenn ich die Namen der Items nicht, und auch die Mänge der Items nicht. Genau an dem scheitere ich.


    Mit freundlichen Grüßen
    Mit freundlichen Grüßen



    GVI (Teil1/2): 80%

    lurker schrieb:

    Der Name der Item kann aber durch denn User ausgewählt werden.

    VB.NET-Quellcode

    1. BbbToolStripMenuItem.Text = "hallo"
    2. CccToolStripMenuItem.Text = "IrgentEinName"
    :?: :?: :?:
    Die Name der Variablen einer Instanz von ToolStripMenuItem gibst Du vor.
    Ansonsten hast Du ein Programm geschrieben, dass sich selbst umschreibt und da müsste ich mich gaaaaanz tief vor Dir verneigen. :D :D :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!

    lurker schrieb:

    Aber angenommen es sind 5000 Items

    Dann hast Du ein absolut schade Programm gebastelt.
    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 hängt unter Anderem davon ab, wie du die Items hinzufügst.
    Du könntest z.B. alle Items in einer Schleife durchlaufen, ihnen einen sinnvollen Namen geben und eine EventSub zuordnen.

    Was sollen die Items denn für Funktionen haben?
    :thumbsup: Seit 26.Mai 2012 Oppa! :thumbsup:
    Wie oben beschieben, greifen alle Items, die erzeugt werden auf eine Methode zu. Nun muss diese Methode herausfinden, welches erstellte Item gedrückt wurde.

    Das Item wird übrigends so erzeugt:

    VB.NET-Quellcode

    1. Dim neu As New ToolStripMenuItem(TextBox3.Text)
    2. AddHandler neu.Click, AddressOf Form1.ItemGetrückt
    3. Form1.ÖffnenToolStripMenuItem.DropDownItems.Add(neu)
    Mit freundlichen Grüßen



    GVI (Teil1/2): 80%