【问题标题】:How to program multiple WindowsForms at once?如何一次编写多个 WindowsForms?
【发布时间】:2017-05-05 15:48:47
【问题描述】:

我有很多 toolStripMenuItem,我希望它们都执行相同的功能,但使用另一个参数。这是否可以在 for 循环中编程?

所以这就是我得到的:

    private void toolStripMenuItem1_Click(object sender, EventArgs e) 
    {
        myFunction(1);
    }

    private void toolStripMenuItem2_Click(object sender, EventArgs e)
    {
        myFunction(2);
    }

    private void toolStripMenuItem3_Click(object sender, EventArgs e)
    {
        myFunction(3);
    }

提前致谢

【问题讨论】:

  • 你的代码没问题。有什么问题?为什么是 for 循环?
  • @ispiro 因为我有很多按钮(20),所以我认为如果我在 for 循环中这样做会更好

标签: c# winforms for-loop


【解决方案1】:

为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));

【讨论】:

  • @UweKeim 你所说的实变量是什么意思?
【解决方案2】:

根据您的评论,您可以遍历 ToolStripMenu 的子项,并在 for 循环中订阅。比如:

foreach(ToolStripMenuItem i in toolStripMenu1.Children)
{
    i.Click += toolStripMenuItem_Click;
}

然后在toolStripMenuItem_Click,有:

if(sender as ToolStripMenuItem == toolStripMenuItem1)
{
    ....
}
if(sender as ToolStripMenuItem == toolStripMenuItem2)
{
    ....
}
    ....

但可能不会有任何收获。关键是 somewhere 您将不得不提供一个参数(如在您的问题的代码中)或检查哪个项目调用了该方法,以便决定要做什么。我并不是说不能有例外。我只是不容易找到一个。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-29
    • 2018-08-02
    • 1970-01-01
    • 1970-01-01
    • 2020-08-23
    • 1970-01-01
    • 2022-08-21
    • 1970-01-01
    相关资源
    最近更新 更多