c# - 我可以将 ContextMenuStrip 上的多个项目绑定到同一个函数吗?
问题描述
ContextMenuStrip
如果表单中的某些对象可见或不可见,我制作了一个填充了 Items 的内容。
当我单击此上下文菜单的一项时,表单上的一个属性正在根据单击的菜单项发生变化。我想访问此类中的一个函数,该函数读取该属性并在表单中进行一些更改。
一些代码:
private void AddMenuItems(){
ContextMenuStrip c = new ContextMenuStrip();
if (extension.Equals("sty") || extension.Equals("st2") || extension.Equals("sst")) {
this.fileExtension = "style";
c.Items.Add("Style files (c/u)");
}
if (extension.Equals("txt")){
this.fileExtension = "text";
c.Items.Add("Text files (c/u)");
}
// some other ifs
// I've tried this, but only the last one is registered
foreach(ToolStripMenuItem m in c.Items){
m.Click += CheckSelectedType;
}
}
private void CheckSelectedType(object sender, EventsArgs e){
switch(this.fileExtension){
case "style":
// do something
break;
case "text":
// do something
break;
}
}
解决方案
你可以这样写:
private ContextMenuStrip CreateContextMenuStrip(string extension)
{
var result = new ContextMenuStrip();
if ( extension.Equals("sty") || extension.Equals("st2") || extension.Equals("sst") )
{
var item = result.Items.Add("Style files (c/u)");
item.Tag = "style";
item.Click += ContextMenuItem_Click;
}
else
if ( extension.Equals("txt") )
{
var item = result.Items.Add("Text files (c/u)");
item.Tag = "text";
item.Click += ContextMenuItem_Click;
}
return result;
}
private void ContextMenuItem_Click(object sender, EventArgs e)
{
switch ( (string)( (ToolStripItem)sender ).Tag )
{
case "style":
// ...
break;
case "text":
// ...
break;
}
}
推荐阅读
- tizen - 在 Tizen Studio 上运行应用程序时出现“无法安装应用程序”错误
- scala - 无法创建配置对象
- javascript - Highstock 上的多窗格
- c# - 如何在 global.asax 中添加别名以导入命名空间
- c# - Gridview 在尝试添加新记录时删除以前的记录
- python - 如何在python中修剪/删除字符串中的“\ n”
- java - 在 Java 11 中运行不同目录中的两个模块
- javascript - 是否有可能使某些事件无法在 FullCalendar 上进行?
- c++ - 在makefile中规避重复库头和typedef的方法
- c# - 使用 C# 在 .NET 3.5 与 .NET 4.6 中下载 pdf