Autor Beitrag
thetemplar_
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Do 27.08.09 10:02 
Hey,
ich hab folgendes Problem:
Ich erstelle dynamisch eine Dropdownliste:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
string[] dirs = Directory.GetDirectories(path);
foreach (string dir in dirs)
{
 dynItem[i] = new ToolStripMenuItem();
 dynItem[i].Text = dir.ToString().Substring(path.Length+1);
 projektAuswählenToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { dynItem[i] });
 dynItem[i].Click += new EventHandler(Form1_Click());
 i++;
}


Jetzt will ich, wenn ein Item angeklickt wird, dieses Item mit einem Harken versehen, also auf ".Checked = true" setzen. Nur wie kann ich die einzelnen Items unterscheiden, da jeder Eintrag die gleiche Funktion aufruft. Kann ich irgendwie Parameter (i) übergeben? Ich hab es nicht hinbekommen, weil es dann eine neue Überladung wäre, da schon 2 Variablen definiert sind (void Form1_Click(object sender, EventArgs e))...

Wie löse ich das Problem, ich hab leider kein Schimmer unter was ich dabei googeln muss...

Danke
raiguen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 374

WIN 2000prof, WIN XP prof
D7EP, MSSQL, ABSDB
BeitragVerfasst: Do 27.08.09 11:55 
Nun, weise jedem ToolStripMenuItem in der Eigenschaft .Tag eine aussagekräftige Bezeichnung zu.
In dem abonierten Event überprüfst du den sender auf DropDownItem -> wenn ja, dann klärst du den Tag und entscheidest dann, was gemacht werden soll

kurzer Gedankenstoss:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
if (sender is DropDownItem)
  {//--.Tag-Eigenschaft ist z.B. als string 
    string ditag = (sender as DropDownItem).Tag.ToString();
    switch (ditag)
      {// hier die case-Anweisungen
      }  
}
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Do 27.08.09 17:46 
Zweiter, fortgeschrittener Lösungsweg: Anonyme Methoden (oder Lambdas).

ausblenden C#-Quelltext
1:
2:
3:
dynItem[i].Click += delegate {
  // Zugriff auf "dir" etc.
};

_________________
>λ=