我有很多toolStripMenuItem,我希望这些都能做同样的功能,但是还有另一个参数。这有可能以for循环编程吗?
所以这就是我得到的:
condform
提前致谢
答案 0 :(得分:4)
为3个控件设置OnClick只有一个方法:
private void toolStripMenuItem_Click(object sender, EventArgs e)
{
//I suppose this is MenuItem if it something else you should write correct control
MenuItem item = (MenuItem)sender;
int attributeValue = 0;
if(sender.ID == "toolStripMenuItem1")
{
attributeValue=1
}
else if (sender.ID == "toolStripMenuItem2")
{
attributeValue=2
}
else if(sender.ID == "toolStripMenuItem3")
{
attributeValue=3
}
myFunction(attributeValue);
}
如果你有严格的控件名称:toolStripMenuItem1,toolStripMenuItem2等等。
MenuItem item = (MenuItem)sender;
string numberID = string.Concat(item.ID.Where(x=> char.IsNumber(x)));
myFunction(int.Parse(numberID));
答案 1 :(得分:1)
根据你的评论,你可以迭代ToolStripMenu的Children,并订阅for循环。类似的东西:
foreach(ToolStripMenuItem i in toolStripMenu1.Children)
{
i.Click += toolStripMenuItem_Click;
}
然后在toolStripMenuItem_Click
中,有:
if(sender as ToolStripMenuItem == toolStripMenuItem1)
{
....
}
if(sender as ToolStripMenuItem == toolStripMenuItem2)
{
....
}
....
但可能没有任何收获。关键是某处你必须要么提供一个参数(如在你的问题的代码中),要么检查哪个项称为方法,以便决定做什么。我不是说不能是例外。我只是不容易找到一个。