VB 2005 - Kein Index vorhanden?

Xervek

Mitglied
Hallo,

ich hoffe mal das ich hier richtig bin, bisher habe ich nämlich nur die News gelesen, dass Visual Studio 2005 Inhalte hier her sollen...

Also es handelt sich um Visual Basic 2005 und ich habe ein ziemliches Problem. Folgendes:

Ich lasse mit ein ContextMenuStrip mit variablen Inhalten Füllen, Beispielweise Namen. Dieses Element ist mit einem NotifyIcon verknüft, demnach wird es also als Popupmenu genutzt. Die Anzahl Variiert aber von Programmstart zu Programmstart. Es kann als vorkommen dass in meinem Popup Menü mal steht "Harald; Hans; Otto" und mal nur "Otto". Ich habe mir jetzt nen Wolf gesucht, wie ich aus einem "DropDown"-Menü den Index rauskitzeln kann. Ich möchte also in einer MSGBox angezeigt bekommen, welchen Eintrag ich grade ausgewählt habe. Nehmen wir das 1. Beispiel oben, bei einem Klick auf Harald soll mir eine "0" ausgegeben werden, bei einem Klick auf Hans eine "1" und bei Otto halt eine "2". Ich finde jedoch keine Möglichkeit den Index des geklickten Elements der Liste ausgeben zu lassen, es wird wohl extrem einfach sein (denn bei VB6 war es noch vorhanden und ich wusste wie ich dran komme) aber jetzt...

Wäre nett wenn mir jemand helfen könnte!

Liebe Grüße und vielen Dank im Voraus!
 
Hi,

Die Klasse ContextMenuStrip hat u.a. den Member Items. Anhand der Collection kannst du auch den Index des Items finden, welches geklickt wurde.
 
Hallo,

besten Dank für deine Antwort, nun ich zeige dir mal was ich genau meine, denn ich verstehe nicht was du mir mit "collection" sagen willst, komme wie gesagt von VB6, da war es doch einfacher, naja es wird schon...

Folgendes... mein ContextMenuStip heißt "systray_menu" nur um es zu sagen. In diesem Menu gibt es einen Eintrag genannt: "ExistingprofilesToolStripMenuItem". Und hier im DropDownMenu adde ich je nach dem halt die Namen. Ich nutze dann also folgenden Code um auf den "Click" zuzugreifen:

Code:
    Private Sub ExistingprofilesToolStripMenuItem_DropDownItemClicked(ByVal sender As Object, ByVal e As System.Windows.Forms.ToolStripItemClickedEventArgs) Handles ExistingprofilesToolStripMenuItem.DropDownItemClicked

        MsgBox("Test um zu gucken ob es funktioniert")

    End Sub

Wunderbar, die MSGBox erscheint nun also wenn ich einen beliebigen Eintrag auswähle aus dem DropDownMenu des "ExistingprofilesToolStripMenuItem". Aber wie müsste jetzt der Code aussehen, damit mir die MSGBox den Index des ausgewählten Elemtents anzeigt?

Etwas wie "Collection" gibts leider nicht als Member, Index ebenfalls nicht... demnach habe ich bisher nichts gefunden.

Sorry wenn ich dich jetzt nicht verstanden habe und der Weg extrem einfach ist, aber ich verstehe es grade einfach nicht, sorry...

Wäre also nett wenn du mir das noch mal etwas näher erklären könntest..

Liebe Grüße und vielen Dank für die bisherige und zukünftige Hilfe!
 
Hi,

Das es das Property Collection nicht gibt, hab ich auch nicht gesagt. Ich hab gesagt, es gibt ein Property namens Items und das ist eine Collection.
Und diese Collection hat unter anderem die Methode IndexOf(ToolStripItem) ;)

Kleiner Tip mit großer Wirkung:
Schau dir die Klassen die du nutzt genau an. Schau was es für Properties und Methoden gibt und was dir diese bringen.
 
Hallo,

da geht gar nichts, ich bekomme permanent eine "-1" und das es das nicht ist, wenn ich den 10. Eintrag auswähle das weiß wohl jeder. Folgender Code funktioniert da wohl nicht

Code:
    Private Sub ExistingprofilesToolStripMenuItem_DropDownItemClicked(ByVal sender As Object, ByVal e As System.Windows.Forms.ToolStripItemClickedEventArgs) Handles ExistingprofilesToolStripMenuItem.DropDownItemClicked

        MsgBox(Me.ExistingprofilesToolStripMenuItem.DropDownItems.IndexOf(Me.ExistingprofilesToolStripMenuItem))  'dropdowItems.IndexOf(Me.ChangeprofileToolStripMenuItem))

    End Sub

Alles weitere gespiele in den () bringt mich auch nicht weiter. Der Punkt in den Klammern bringt mich zum Verzeifeln. Ich habe bereits den IndexOf() versucht aber auch damals bekam ich nur "-1" weshalb ich das wieder verworfen habe. Ich bin einfach zu bescheuert für diesen beknacken, dämlichen Index. Hat es nen Grund das ich "-1" bei jedem Klick rausbekomme oder bin ich einfach nur zu bescheuert dazu?

Edit:

Mist irgendwie bin ich echt zu balla... mit dem von dir gezeigten will es auch nicht rennen, davon abgesehen habe ich den Artikel bereits gelesen, ebenfalls in meiner MSDN aber irgendwie will das alles nicht, kein Weg macht es möglich...
 
Zuletzt bearbeitet:
Kann auch nicht gehen
So wie du es jetzt hast, müsste ExistingprofilesToolStripMenuItem von sich selbst Child sein. Geht aber nicht
Du musst das Item welches angeklickt wurde in der übergeordeten Collection suchen
am einfachsten so(vorausgesetzt, du hast das richtige Event abonniert):
Code:
Private Sub ExistingprofilesToolStripMenuItem_DropDownItemClicked(ByVal sender As Object, ByVal e As System.Windows.Forms.ToolStripItemClickedEventArgs) Handles ExistingprofilesToolStripMenuItem.DropDownItemClicked

        MsgBox(Me.ExistingprofilesToolStripMenuItem.DropDownItems.IndexOf(e.ClickedItem))  

    End Sub
Dafür muss aber auch das geklickte Item Child von ExistingprofilesToolStripMenuItem (was für ein Name :D) sein
 
Hallo,

ohh man! Mit deinem Code funktioniert es jetzt ausgezeichnet! Vielen Dank dafür! Es ist krass was daraus im Vergleich zu VB6 gemacht wurde... da wurde einfach

Private Sub Button1_Click(index as integer) und zack hat es funktioniert und nu? Mann, mann, mann... naja es geht, vielen Dank!

Was den/Die Namen betrifft... nun das wird jetzt alles geändert, das ist es nicht was es bleibt, die sind zu lang, bescheuert und sowas, es geht nur darum, dass ich es in "Rohform" verstanden habe, dann kann ich es ändern da ich einigermaßen weiß, was ich wie ändern muss damit es am Ende noch funktioniert. Wenn aber die MSDN durchsucht wird und dann etwas wie "Button1_Click" da steht, dann muss ich das jedesmal alles abändern auf meine umbenannten Namen, da versuche ich es erst einmal so, bis es funktioniert, versuche zu verstehen was dahinter steckt und DANN ändert ich es ab damit ich an anderer Stelle auch einfacher drauf zugreifen kann... auf jedenfall und wie schon ein paar mal gesagt funktioniert es jetzt allerbestens!

Vielen, vielen Dank dafür, das war ja eine schwere Geburt meinerseits... DANKE!

Liebe Grüße
 
Hallo,

ohh man! Mit deinem Code funktioniert es jetzt ausgezeichnet! Vielen Dank dafür! Es ist krass was daraus im Vergleich zu VB6 gemacht wurde... da wurde einfach

Private Sub Button1_Click(index as integer) und zack hat es funktioniert und nu? Mann, mann, mann... naja es geht, vielen Dank!
VB6 und VB.NET haben bis auf Syntax und Name nichts mehr gemeinsam.
Daran lässt sich erkennen, dass VB erwachsen geworden ist ;)
(Bitte zu dem Satz jetzt keine Grundsatzdiskussionen anfangen, ich mag halt VB nicht)
Was den/Die Namen betrifft... nun das wird jetzt alles geändert, das ist es nicht was es bleibt, die sind zu lang, bescheuert und sowas, es geht nur darum, dass ich es in "Rohform" verstanden habe, dann kann ich es ändern da ich einigermaßen weiß, was ich wie ändern muss damit es am Ende noch funktioniert. Wenn aber die MSDN durchsucht wird und dann etwas wie "Button1_Click" da steht, dann muss ich das jedesmal alles abändern auf meine umbenannten Namen, da versuche ich es erst einmal so, bis es funktioniert, versuche zu verstehen was dahinter steckt und DANN ändert ich es ab damit ich an anderer Stelle auch einfacher drauf zugreifen kann... auf jedenfall und wie schon ein paar mal gesagt funktioniert es jetzt allerbestens!
Ich wollte nicht, dass du deine Objektnamen änderst. Jedem ist selbst überlassen, wie er seine Controls, Objekte, ... nennt
Vielen, vielen Dank dafür, das war ja eine schwere Geburt meinerseits... DANKE!

Liebe Grüße
keine Ursache, dafür ist das Forum da
 
Zurück