Laden...

SubItems in ToolStripDropdownButton

Erstellt von KingOsirisOne vor 10 Jahren Letzter Beitrag vor 10 Jahren 2.948 Views
K
KingOsirisOne Themenstarter:in
4 Beiträge seit 2014
vor 10 Jahren
SubItems in ToolStripDropdownButton

Hey,

ich hoffe, dass diese Frage jetzt nicht zu "unprofessionell" für das Forum ist und man mit Antworten gibt.

Meine erste Anwendung seit Jahren, dazu in einer anderen Sprache, funktioniert mittlerweile sehr gut. Jetzt geht es um die Verbesserung der Usability für den Endanwender.

Für einen Filter von Datenbankeinträgen habe ich in einer Toolstrip einen DropdownButton eingefügt, der dynamisch anhand der Datenbank gefüllt wird. Alles kein Thema.

Nun möchte ich aber während des Ladens der Einträge für den DropdownButton gern auch SubItems einfügen. Und das bekomme ich nicht hin. Er fügt immer wieder die gewünschten Items im Root ein und nicht entsprechend als SubItem unter dem gerade erstellten Dropdown-Eintrag. Keine Ahnung, wie ich es verdeutlichen soll. Im Anhang ist ein Screeni. DropDownMenü ist da.. es sollen aber zu jedem Eintrag auch Untereinträge eingefügt werden.

Und ja... ich habe im Netz geschaut. Aber scheinbar habe ich falsch geschaut. 😕 Und es ist nicht so, dass mich das erst seit gerade beschäftigt.

LG

Sascha

R
212 Beiträge seit 2012
vor 10 Jahren

Ich hab jetz einfach mal einf mit dem Designer in Wiforms ertsellt mit 1.überschrift und 1.Item mit unteritem hoffe das Hilf dir weiter 😛


this.menuStrip1 = new System.Windows.Forms.MenuStrip();
            this.halloToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
            this.ddlItem1ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
            this.mLItem11ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
            this.menuStrip1.SuspendLayout();
            this.SuspendLayout();
            // 
            // menuStrip1
            // 
            this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
            this.halloToolStripMenuItem});
            this.menuStrip1.Text = "menuStrip1";
            // 
            // ToolStripMenuItem
            // 
            this.halloToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
            this.ddlItem1ToolStripMenuItem});
            this.halloToolStripMenuItem.Name = "halloToolStripMenuItem";
            this.halloToolStripMenuItem.Text = "Filter";
            // 
            // ML_Item1ToolStripMenuItem
            // 
            this.ddlItem1ToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
            this.mLItem11ToolStripMenuItem});
            this.ddlItem1ToolStripMenuItem.Name = "ddlItem1ToolStripMenuItem";
            this.ddlItem1ToolStripMenuItem.Text = "ML_Item1";
            // 
            // ML_Item1.1ToolStripMenuItem
            // 
            this.mLItem11ToolStripMenuItem.Name = "mLItem11ToolStripMenuItem";
            this.mLItem11ToolStripMenuItem.Text = "ML_Item1.1";

K
KingOsirisOne Themenstarter:in
4 Beiträge seit 2014
vor 10 Jahren

Okay, vielen, vielen Dank für die rasche Antwort. Dann gehe ich es vllt. falsch an. Arbeite "leider" nur objektorientiert. Mein Code für das aktuelle Vorhaben lautet:

public void toolStrip1KategorienLaden()
        {
            tsbFilter.DropDownItems.Clear();

            tsbFilter.DropDownItems.Add("++++++");
            tsbFilter.DropDownItems.Add("++++++");
            tsbFilter.DropDownItems.Add("-");
            
            OleDbConnection congetKategoriename = new OleDbConnection("provider = microsoft.jet.oledb.4.0;data source=datenbankpfad");
            congetKategoriename.Open();
            OleDbCommand cmdgetKategoriename = new OleDbCommand("select KategorieName from mlKategorien where BenutzerID = " + frmMain.user_id + " order by KategorieName", congetKategoriename);
            OleDbDataReader readergetKategoriename = cmdgetKategoriename.ExecuteReader();
            while (readergetKategoriename.Read())
            {
                tsbFilter.DropDownItems.Add(readergetKategoriename[0].ToString());
                // Hier sollen nun auch SubItems (Genre) erstellt werden... Die Datenbankabfrage ist kein Ding, aber das Erstellen eines SubItems zum zuvor angelegten Item funzt nicht
            }
            congetKategoriename.Close();
        }

Ich will keine fertige Lösung. Aber Lösungsansätze, nach dem ich im Netz nichts fand, wären nice! Eine Methode für "...DropDownItems[x].SubItems.Add()" fehlt mir iwie.

R
158 Beiträge seit 2007
vor 10 Jahren

Eine Methode für "...DropDownItems[x].SubItems.Add()" fehlt mir iwie. Die gibt es auch nicht, sondern 'nur' DropDownItems.Add().

Habe mal einen kurzen Schnippsel für exemplarische Vorgehensweise, an dem ersichtlich wird, wie Du Dein 'Problem' lösen könntest (natürlich Deinen Bedürfnissen/Erfordernissen anpassen!):


            //--DropdownItems zur Laufzeit zu einem bestehenden DropDownButton hinzufügen
            ToolStripMenuItem tsmiLevel0, tsmiLevel1 ;
            //--Rootebene
            tsmiLevel0 = new ToolStripMenuItem();
            tsmiLevel0.Text = "Level0 Eintrag 1";
            tsmiLevel0.Tag = "Level0Tag1";

            //--Unterebene
            tsmiLevel1 = new ToolStripMenuItem();
            tsmiLevel1.Text = "Level1 Eintrag 0.1";
            tsmiLevel1.Tag = "Level1 Tag0.1";
            //--in die Rootebene aufnehmen
            tsmiLevel0.DropDownItems.Add(tsmiLevel1);

            tsmiLevel1 = new ToolStripMenuItem();
            tsmiLevel1.Text = "Level1 Eintrag 0.2";
            tsmiLevel1.Tag = "Level1 Tag0.2";
            //--in die Rootebene aufnehmen
            tsmiLevel0.DropDownItems.Add(tsmiLevel1);

            //--alle DropDownItems zum DropDownButton hinzufügen
            toolStripDropDownButton2.DropDownItems.Add(tsmiLevel0);


            //-- neue Rootebene (=Level 0)
            tsmiLevel0 = new ToolStripMenuItem();
            tsmiLevel0.Text = "Level0 Eintrag 2";
            tsmiLevel0.Tag = "Level0Tag2";

            //--Unterebene (=Level 1)
            tsmiLevel1 = new ToolStripMenuItem();
            tsmiLevel1.Text = "Level1 Eintrag 2.1";
            tsmiLevel1.Tag = "Level1 Tag1.1";
            tsmiLevel0.DropDownItems.Add(tsmiLevel1);

            tsmiLevel1 = new ToolStripMenuItem();
            tsmiLevel1.Text = "Level1 Eintrag 2.2";
            tsmiLevel1.Tag = "Level1 Tag1.2";
            tsmiLevel0.DropDownItems.Add(tsmiLevel1);

            toolStripDropDownButton2.DropDownItems.Add(tsmiLevel0);


             //-- neuen DropDownButton zur Laufzeit mit allen erforderlichen Ebenen hinzufügen
            ToolStripDropDownButton tsddButton;

            tsddButton = new ToolStripDropDownButton("Neuer Buttton");
            //-- neue Rootebene (=Level 0)
            tsmiLevel0 = new ToolStripMenuItem();
            tsmiLevel0.Text = "Level0 Eintrag 1";
            tsmiLevel0.Tag = "Level0Tag2";

            //--Unterebene (=Level 1)
            tsmiLevel1 = new ToolStripMenuItem();
            tsmiLevel1.Text = "Level1 Eintrag 1.1";
            tsmiLevel1.Tag = "Level1 Tag1.1";
            tsmiLevel0.DropDownItems.Add(tsmiLevel1);

            tsmiLevel1 = new ToolStripMenuItem();
            tsmiLevel1.Text = "Level1 Eintrag 1.2";
            tsmiLevel1.Tag = "Level1 Tag1.2";
            tsmiLevel0.DropDownItems.Add(tsmiLevel1);

            tsddButton.DropDownItems.Add(tsmiLevel0);
            toolStrip1.Items.Add(tsddButton);



Zu jedem neuerstellten ToolStripMenuItem tsmiLevel1 kann beispielsweise auch gleich das passende Ereignis abonniert werden:


            tsmiLevel1.DropDownItemClicked += new ToolStripItemClickedEventHandler(tsmiLevel1_DropDownItemClicked);

...
            tsmiLevel1.Tag = "Level1 Tag1.1";
            tsmiLevel1.DropDownItemClicked += new ToolStripItemClickedEventHandler(tsmiLevel1_DropDownItemClicked);
            tsmiLevel0.DropDownItems.Add(tsmiLevel1);

...
            tsmiLevel1.Tag = "Level1 Tag1.2";
            tsmiLevel1.DropDownItemClicked += new ToolStripItemClickedEventHandler(tsmiLevel1_DropDownItemClicked);
            tsmiLevel0.DropDownItems.Add(tsmiLevel1);



       void tsmiLevel1_DropDownItemClicked( object sender, ToolStripItemClickedEventArgs e )
        {   //--nur als exemplarisches Beispiel
            string itemtag =  e.ClickedItem.Tag.ToString();
            //--mach was auch immer, z.B. Detaildaten anhand des geklickten Items bzw des Tags holen...
        }


K
KingOsirisOne Themenstarter:in
4 Beiträge seit 2014
vor 10 Jahren

Nice! Danke!!! Werde mich nach der zu tätigenden Hausarbeit dranmachen und es umsetzen. Danke für die Hilfestellung und den Denkanstoß.

K
KingOsirisOne Themenstarter:in
4 Beiträge seit 2014
vor 10 Jahren

Huiuiuiuiui!!!! 😄 Funzt. Und wieder was dazu gelernt. Und ja... ich werde mir dennoch mal ein ausführliches Buch für C# zulegen. 😃 Ist doch Alles etwas anders im Vergleich zu Delphi und zu vor 8-9 Jahren, aber ich denke es liegt nun eher daran, dass es für mich ne "neue" Sprache ist. 😄

Vielen lieben Dank an Robin0 und vor Allem raiguen!!!!