kostenloser Webspace werbefrei: lima-city


ContextMenuStrip-Problem

lima-cityForumProgrammiersprachenProgrammieren mit .NET & Mono

  1. Autor dieses Themas

    programtools

    programtools hat kostenlosen Webspace.

    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
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. 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
  4. Autor dieses Themas

    programtools

    programtools hat kostenlosen Webspace.

    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
  5. wenns nicht dropdownitems() heißt, dann irgendwie items() oder sowas in der art...
    einfach ein bischen suchen.
  6. Autor dieses Themas

    programtools

    programtools hat kostenlosen Webspace.

    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?
  7. 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ß
  8. es muss irgendwo sein! muss irgendwie "item" im namen haben...
  9. Ja, ToolStripMenuItem.DropDownItems
  10. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!