C#WinForm用于类似函数的多个单击事件处理程序

时间:2015-12-18 14:01:29

标签: c# winforms event-handling mouseclick-event

我有一些toolStripMenuItems作为一系列网站的有用链接,代码的粗略示例如下:

private void toolStripMenuItem1_Click(object sender, EventArgs e)
{
    Process.Start("http://www.google.com");
}

private void toolStripMenuItem2_Click(object sender, EventArgs e)
{
    Process.Start("http://www.bing.com");
}

private void toolStripMenuItem3_Click(object sender, EventArgs e)
{
    Process.Start("https://www.duckduckgo.com");
}

private void toolStripMenuItem4_Click(object sender, EventArgs e)
{
    Process.Start("http://www.yahoo.com/");
}
...

有更优雅的方式来处理这个问题吗?

4 个答案:

答案 0 :(得分:5)

将url放在菜单项标记中并将此处理程序附加到所有这些(希望它可以正常工作)

private void toolStripMenuItemClick(object sender, EventArgs e)
{
    Process.Start(sender.Tag.ToString());
}

答案 1 :(得分:2)

"醪"将所有事件处理程序合并为一个,然后使用sender查看点击的ToolStripMenuItem

private void toolStripMenuItem_Click(object sender, EventArgs e)
{
    if(sender == toolStripMenuItem1)
        Process.Start("http://www.google.com");
    else if(sender == toolStripMenuItem2)
        Process.Start("http://www.bing.com");
    else if(sender == toolStripMenuItem3)
        Process.Start("http://www.duckduckgo.com");
    else if(sender == toolStripMenuItem4)
        Process.Start("http://www.yahoo.com");
}

或者,正如Artem笔记使用Tag的{​​{1}}成员来存储代表要访问的网站的Control。然后将String投射到sender.Tag并使用它。

String

答案 2 :(得分:2)

要做的第一件事是为每一个使用相同的处理程序:

toolStripMenu1.Click += toolStripItemClick;
toolStripMenu2.Click += toolStripItemClick;
// etc

我会使用Tag属性,在构造toolStripItems时设置它:

toolStripMenu1.Tag = "http://www.google.com";

然后定义你的处理程序:

private void toolStripItemClick(object sender, EventArgs e)
{
    var c = (ToolStripMenuItem)sender;
    Process.Start(c.Tag.ToString());
}

答案 3 :(得分:0)

您还可以使用lambda表达式订阅click事件:

toolStripMenuItem1.Click += (_, __) => Process.Start("process1");
toolStripMenuItem2.Click += (_, __) => Process.Start("process2");