我有一些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/");
}
...
有更优雅的方式来处理这个问题吗?
答案 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");