ContextMenuStrip-Problem
lima-city → Forum → Programmiersprachen → Programmieren mit .NET & Mono
auslese
beenden
code
computer
datei
eigenschaft
entsprechen
helfen
hoffnung
item
klammern
laufwerk
laufzeit
parameter
problem
sender
string
system
text
unterpunkt
-
Hi @ all
ich habe ein kleines Problemchen mit meinem ContextMenuStrip-Control!
Und zwar möchte ich zu einem Unterpunkt dynamisch alle existierenden Laufwerkbuchstaben hinzufügen.
Die Struktur sollte so aussehen:
MenuPunkt1 MenuPunkt2 Alle Laufwerke -> C:\ -> E:\ -> (und soweiter, eben alle existierenden Laufwerke) Plazhalter MenuPunkt4 MenuPunkt5
Nach Suchen im Internet habe ich auch sowas zusammengestellt bekommen:
Private Sub frm_main_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 'item hinzufügen Dim drive() As String = {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"} Dim item As New ToolStripMenuItem("Alle Laufwerke") For Each i In drive If My.Computer.FileSystem.FileExists(i & ":\" ) Then item.DropDownItems.Add(i & ":\") item.DropDownItems.Item(item.DropDownItems.Count - 1).Text = i & ":\" AddHandler item.DropDownItems.Item(item.DropDownItems.Count - 1).Click, AddressOf subitemitem_drive_click End If Next cms_nfico.Items.Add(item) 'Plazhalter cms_nfico.Items.Add("-") 'beenden Item cms_nfico.Items.Add("Beenden") cms_nfico.Items.Item(cms_nfico.Items.Count - 1).Text = "Beenden" AddHandler cms_nfico.Items.Item(cms_nfico.Items.Count - 1).Click, AddressOf beenden end sub Sub subitemitem_drive_click() 'hier sollte das Laufwerk übergeben werden das angeklickt wurde End Sub
Jetzt habe ich 2 Probleme:
1) Ich muss erst den übergeordneten Eintrag erstellen ('Alle Laufwerke') und kann dann erst diesem Subitems hinzufügen, was aber dazu führt das ich alle nachfolgenden Einträge auch dynamisch erstellen muss (zB. den Beenden Item)
Ist es möglich mit dropdownitems subitems zu einem existierenden Eintrag hinzuzufügen? und wenn ja, wie?
2)Ich habe nun für jedes existierende Laufwerk einen Menüpunkt (untergeordnet zu 'Alle LAufwerke') und auch ein click handle.
Aber ich möchte beim Click auf eines dieser Laufwerke, das LAufwerk als PArameter haben.
Ich könnte also
- Irgendwie einen Parameter an das sub 'subitem_drive_click' übergeben, was aber leider nicht klappt, da mein vb.net sagt:
"der AdressOf-Operand muss dem Namen einer Methode entsprechen (ohne Klammern)".
-Ich lese im Clickereigniss 'subitemitem_drive_click()' den Text des angeklickten subitems aus, der JA dem Laufwerk entspricht.
Leider habe ich auch nach intensivem Suchen nix gefunden, was ich verstanden habe oder was mich weitergebraccht hat. Ich hoffe ihr könnt mir helfen! Vielen Dank schonmal und MFG -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
ist recht einfach...
ich hoffe ich kann dir helfen. das letzte mal hab ich damit ein favoriten-menü erstellt.
nun zu deinen fragen:
1) ja, das geht!
cms_nfico.Items(<index bzw name des menüpunktes>).DropDownItems.Add(<name des zu erstellenden mp>)
mal nebenbei: funktioniert das? ich meine die laufwerke so abzufragen? ich kenne nur
For Each Laufwerk As IO.DriveInfo In My.Computer.FileSystem.Drives
hat den vorteil, dass man auch die bezeichnung auslesen kann, uvm...
2) ich hab ne helper-klasse genommen
schritt 1: du fügst deinem projekt eine leere vb-datei (klasse) hinzu.
schritt 2: du kopierst volgenden code in diese datei:
Public Class Laufwerk Inherits ToolStripMenuItem Dim strName As String = "" Sub New(ByVal Laufwerkname As String) Me.Text = Laufwerkname strName = Laufwerkname End Sub Private Sub Laufwerk_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Click 'hier steht die aktion die du ausführen möchtest. zb: Form1.Text = "Text" Form1.MachWas(strName) End Sub End Class
nun zum einfügen:
'item hinzufügen Dim drive() As String = {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"} For Each i In drive If My.Computer.FileSystem.FileExists(i & ":\" ) Then Dim MenuPunkt As New Laufwerk(i & ":\") cms_nfico.Items("Alle Laufwerke").DropDownItems.Add(MenuPunkt) End If Next
sollte klappen! viel spaß!
Beitrag zuletzt geändert: 28.10.2010 14:27:43 von rb-online -
Hey das ist ja supi ;)
also das mit der Classe war eine tolle Lösung!
Ich habe das noch ein klein bisschen angepasst, aber das mit dem draufklicken und den Wert erhalten läuft super!
Nur habe ich leider immernoch ein Problem mit dem einfügen zur Laufzeit:
Wenn ich das von dir vorgeschlagene eingebe:
cms_nfico.Items(<index bzw name des menüpunktes>).DropDownItems.Add(<name des zu erstellenden mp>)
Dann meint mein vb.net
"DropDownItems" ist kein Member von "System.Windows.Forms.ToolStripItem".
Woran könnte das liegen? Ich habe schon ein bisschen herumexperimentiert, bin aber zu keinem Ergebniss gekommen.
Ich muss momentan immernoch alles dynamisch einfügen -.-
Ich hoffe du kannst mir da auch noch helfen!
Ansonsten nochmal ein ganz großes Danke an deine Mühe und ausführliche Hilfe, vorallem, da ich echt schon fast die Hoffnung aufgegeben Hatte, dass mir jemand helfen kann!
Echt super!
MFG -
wenns nicht dropdownitems() heißt, dann irgendwie items() oder sowas in der art...
einfach ein bischen suchen. -
Leider nicht.
Ich kann nichts finden, was sich auf einen weiteren Item bezieht
(nur sachen wie 'Name' 'width' und so.)
Bist du dir sicher, dass es da was gibt?
-
Du musst die cms_nfico.Items nach ToolStripMenuItem casten. Dort gibt es die Eigenschaft DropDownItems.
((ToolStripMenuItem)cms_nfico.Items(<index bzw name des menüpunktes>)).DropDownItems.Add(<name des zu erstellenden mp>)
Gruß -
es muss irgendwo sein! muss irgendwie "item" im namen haben...
-
Ja, ToolStripMenuItem.DropDownItems
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage