Dynamisches toolstripmenuitem



  • Es wird erst ermittelt welche COM Ports verfügbar sind, und dann werden diese im Menu COM Ports dynamisch eingetragen. Das funktioniert soweit auch. Aber nun komm ich iwie nicht weiter. Wie kann ich die toolstripmenueitem abfragen, also welche alle eingetragen wurden, beziehungsweise diese auch ansprechen, um sie auf CHECKED zu setzen um mit dem ausgewählten Port die Serielle Schnittstelle danach öffnen zu können? Hat da jemand ne Idee?
    Ansonsten würde mir ja nur die Möglichkeit bleiben z.b. 10 Ports im Menu anzulegen und Visable == false zu setzen. Nur wenn dann jemand mehr als 10 Ports hätte, würde das Programm auch nicht mehr funktionieren.

    Schnittstelle COMPORT = new Schnittstelle();
                COMPORT.GetOpenComPorts();
                comboBox1.Items.Add(COMPORT.comportermitteln);
                foreach (string s in COMPORT.comportermitteln)
                {
                    cOMPortsToolStripMenuItem.DropDownItems.Add(s);
                }
    

    ]



  • Schau dir mal den Rückgabewert der Methode ToolStripItemCollection.Add(string) an - und benutze ihn 😉

    Deine Klasse "Schnittstelle" ist aber umständlich zu benutzen. Warum gibt die Methode GetOpenComPorts() nicht direkt die Liste (bzw. als Enumerable<string>) zurück?



  • Danke für den Tip mit dem GetOpenComPorts(). Das hab ich geändert und klappt. Aber mit dem Toolstripitemcollection komm ich einfach nicht weiter. Habe die ganze Zeit damit schon viel probiert und nach vergleichbaren Quellcode gesucht, komme aber als Anfänger leider noch nicht selbst auf die Lösung. Vielleicht kann mir ja jemand etwas unter die Arme greifen wie ich das anstellen kann, bzw. wie ich benutzen kann.



  • Einfach

    var menuItem = cOMPortsToolStripMenuItem.DropDownItems.Add(s);
    

    Und dann mache etwas mit diesem menuItem, z.B.

    menuItem.Checked = true;
    menuItem.Click += menuItemCOMPort_Click; // Methode dann selber erstellen
    

    s. z.B. Creating Click Events on Programmatically Added Menu Items?



  • Also wenn ich

    var menuItem = cOMPortsToolStripMenuItem.DropDownItems.Add(s);
    

    in der Schleife benutze, dann kann ich dort

    menuItem.Checked = true;
    

    nicht anwenden. Auch menuItem.checkstate wird mir nicht angeboten. Was mache ich da falsch. Der Eventhandler funktioniert zumindest.



  • Die Methode gibt nur die Basisklasse ToolStripItem zurück.
    Da wohl nur ein ToolStripButton die Checked-Eigenschaft hat, mußt du explizit einen ToolStripButton erzeugen:

    var menuItem = new ToolStripButton("Button Text");
    menuItem.Checked = true;
    
    cOMPortsToolStripMenuItem.DropDownItems.Add(menuItem);
    


  • Hat geklappt, Vielen Dank 👍


Log in to reply