onlcickevent mit variable übergabe

larabad

Grünschnabel
Hallo zusammen.
Ich habe mal kurz eine Frage.
Kann man mit einem codeerzeugten clickevent eine variable mit übergeben ?! also:

Code:
 while ((line1 = sr1.ReadLine()) != null)
                            {
                                // string tmp_zeile = line;
                                // string[] tmp_zeile2 = tmp_zeile.Split(new Char[] { '|' });
                                mnu.DropDownItems.Add(line1, null);
                                string tutorials = line1;
                                mnu.DropDownItemClicked += test(line1);//bzw new clickevent
                                //    += (Click, args) =>
                                //{
                                //    MessageBox.Show(line1);
                                //};
                            }



public void clickevent(object sender, ToolStripItemClickedEventArgs e)
{
hier soll die variable tutorials erreichbar sein.
}


danke für eure Hilfe..

gruß
 
Du kannst einem Event keine Variablen übergeben.
Es gibt ein paar Möglichkeiten wie du das Problem lösen kannst.
- Mit delegates arbeiten
- Die Variable global definieren
- Die Variable im sender "verstauen" (Der Tag member ist dafür ganz gut geeignet)
 
Du kannst einem Event keine Variablen übergeben.
Es gibt ein paar Möglichkeiten wie du das Problem lösen kannst.
- Mit delegates arbeiten
- Die Variable global definieren
- Die Variable im sender "verstauen" (Der Tag member ist dafür ganz gut geeignet)

hallo, danke für deine antwort!
wie kann ich das in den sender verstaun ?!
sry bin erst im ersten jahr XD
 
So zum Beispiel:
C#:
private void Form1_Load(object sender, System.EventArgs e)
        {
            string itemName = "Menuitem ";
            for (int i = 1; i < 4; i++)
            {
                ToolStripMenuItem tsItem = new ToolStripMenuItem();
                tsItem.Text = itemName + i;
                tsItem.Tag = tsItem.Text;

                this.toolStripDropDownButton1.DropDownItems.Add(tsItem);
            }

            this.toolStripDropDownButton1.DropDownItemClicked += new ToolStripItemClickedEventHandler(toolStripDropDownButton1_DropDownItemClicked);
            
        }

        void toolStripDropDownButton1_DropDownItemClicked(object sender, ToolStripItemClickedEventArgs e)
        {
            MessageBox.Show(e.ClickedItem.Tag.ToString());
        }

Ein Beispiel für die globale Variable ( Das ist in diesem Fall wirklich eine sehr unschöne Variante ):
C#:
private List<string> tsItems;

        private void Form1_Load(object sender, System.EventArgs e)
        {
            this.tsItems = new List<string>();
            string itemName = "Menuitem ";
            for (int i = 1; i < 4; i++)
            {
                ToolStripMenuItem tsItem = new ToolStripMenuItem();
                tsItem.Text = itemName + i;

                this.toolStripDropDownButton1.DropDownItems.Add(tsItem);
                tsItems.Add(tsItem.Text);
            }
            this.toolStripDropDownButton1.DropDownItemClicked += new ToolStripItemClickedEventHandler(toolStripDropDownButton1_DropDownItemClicked);

        }

        void toolStripDropDownButton1_DropDownItemClicked(object sender, ToolStripItemClickedEventArgs e)
        {
            for (int i = 0; i < this.toolStripDropDownButton1.DropDownItems.Count; i++)
            {
                if (this.toolStripDropDownButton1.DropDownItems[i].Selected)
                    MessageBox.Show(this.tsItems[i]);
            }
        }

Hier noch ein Beispiel mit delegates ( auch ziemlich unschön in diesem Fall )
C#:
private void Form1_Load(object sender, System.EventArgs e)
        {            
            string itemName = "Menuitem ";
            for (int i = 1; i < 4; i++)
            {
                ToolStripMenuItem tsItem = new ToolStripMenuItem();
                tsItem.Text = itemName + i;

                this.toolStripDropDownButton1.DropDownItems.Add(tsItem);
                tsItem.Click += delegate { this.tsItemClicked(tsItem, tsItem.Text); };
            }

        }

        private void tsItemClicked(ToolStripMenuItem item, string tutorials)
        {
            MessageBox.Show(tutorials);
        }

Wie gesagt die letzten beiden Beispiel würde ich so auch nicht verwenden weil sie in diesem Fall einfach unpraktikabel sind. Aber es reicht hoffentlichum das Prinzip zu verstehen.
 
So zum Beispiel:
C#:
private void Form1_Load(object sender, System.EventArgs e)
        {
            string itemName = "Menuitem ";
            for (int i = 1; i < 4; i++)
            {
                ToolStripMenuItem tsItem = new ToolStripMenuItem();
                tsItem.Text = itemName + i;
                tsItem.Tag = tsItem.Text;

                this.toolStripDropDownButton1.DropDownItems.Add(tsItem);
            }

            this.toolStripDropDownButton1.DropDownItemClicked += new ToolStripItemClickedEventHandler(toolStripDropDownButton1_DropDownItemClicked);
            
        }

        void toolStripDropDownButton1_DropDownItemClicked(object sender, ToolStripItemClickedEventArgs e)
        {
            MessageBox.Show(e.ClickedItem.Tag.ToString());
        }

Ein Beispiel für die globale Variable ( Das ist in diesem Fall wirklich eine sehr unschöne Variante ):
C#:
private List<string> tsItems;

        private void Form1_Load(object sender, System.EventArgs e)
        {
            this.tsItems = new List<string>();
            string itemName = "Menuitem ";
            for (int i = 1; i < 4; i++)
            {
                ToolStripMenuItem tsItem = new ToolStripMenuItem();
                tsItem.Text = itemName + i;

                this.toolStripDropDownButton1.DropDownItems.Add(tsItem);
                tsItems.Add(tsItem.Text);
            }
            this.toolStripDropDownButton1.DropDownItemClicked += new ToolStripItemClickedEventHandler(toolStripDropDownButton1_DropDownItemClicked);

        }

        void toolStripDropDownButton1_DropDownItemClicked(object sender, ToolStripItemClickedEventArgs e)
        {
            for (int i = 0; i < this.toolStripDropDownButton1.DropDownItems.Count; i++)
            {
                if (this.toolStripDropDownButton1.DropDownItems[i].Selected)
                    MessageBox.Show(this.tsItems[i]);
            }
        }

Hier noch ein Beispiel mit delegates ( auch ziemlich unschön in diesem Fall )
C#:
private void Form1_Load(object sender, System.EventArgs e)
        {            
            string itemName = "Menuitem ";
            for (int i = 1; i < 4; i++)
            {
                ToolStripMenuItem tsItem = new ToolStripMenuItem();
                tsItem.Text = itemName + i;

                this.toolStripDropDownButton1.DropDownItems.Add(tsItem);
                tsItem.Click += delegate { this.tsItemClicked(tsItem, tsItem.Text); };
            }

        }

        private void tsItemClicked(ToolStripMenuItem item, string tutorials)
        {
            MessageBox.Show(tutorials);
        }

Wie gesagt die letzten beiden Beispiel würde ich so auch nicht verwenden weil sie in diesem Fall einfach unpraktikabel sind. Aber es reicht hoffentlichum das Prinzip zu verstehen.

Danke dir ! =)
werde dann wahrscheinlich auhc das 1. nehmen .. ;) Vielen Dank hast mir bei meinem Programm weiter geholfen.. hoffe nur nicht, das der clicked event 2 x aufgerufen wird ?! bei mir macht ers aus irgendeinem grund -.-
 

Neue Beiträge

Zurück