
ToolStripMenuItem mi0 = (contextMenuStrip1Items[0] as ToolStripMenuItem); //mi0是一级菜单项
if (mi0HasDropDownItems) //如果mi0有子项
{
foreach (ToolStripMenuItem item in mi0DropDownItems)
{
//item //二级菜单项
}
}
这个不是那么简单的
首先toolstripitem 不同于其它对象 他被一个toolstrip添加后 如果再被另一个toolstrip添加 那么第一个toolstrip的选项就莫名其妙的不见了 尽管你是重新负值之后才添加的 效果也是一样
思路还是回到遍历添加上 现在我们不能只是简单的付值添加了
我们要重新创建一个toolstripitem 然后把以前的item的属性取出来放到新的item里去
问题就出现在这 text size image 都容易 click事件怎么取出来呢(注意 我们现在是动态添加 所以不能像一楼说的直接手动指向方法名)
做一个公共的eventhander的数组试试 但是要在加载toolstripitem之前给它付值
public Form1()
{
//toolstriphanders
toolStripHanders = new SystemEventHandler[]{
new SystemEventHandler(thisStripMenuItem1_Click),
new SystemEventHandler(thisStripMenuItem2_Click)
};
InitializeComponent();
}
然后就可以在onload事件中遍历添加了
private void Form1_Load(object sender, EventArgs e)
{
for (int i = 0; i < ToolStripMenuItem1DropDownItemsCount; i++)
{
ToolStripMenuItem item = new ToolStripMenuItem();
itemText = ToolStripMenuItem1DropDownItems[i]Text;
itemClick += toolStripHanders[i];
thiscontextMenuStrip1ItemsAdd(item);
//主菜单事件
ToolStripMenuItem1DropDownItems[i]Click += toolStripHanders[i];
}
}
this表示当前类的对象,可以避免由于变量或方法名相同导致的调用混乱。
这句代码是向菜单中加入一个自定义的项目item,从注释和变量名来看,contextMenuStrip1应该是右键菜单,而contextMenuStrip2是其中的一个子菜单,就是菜单里带箭头的那种。
你写的是WinForm的吧。做菜单应该懂做了吧。我就直接给代码了。
假如我要点击某一个菜单,你在菜单的Click单击事件里写上。
if (thisToolStripMenuItemChecked)
{
thisToolStripMenuItemChecked = false;
}
else
{
thisToolStripMenuItemChecked = true;
}
ToolStripMenuItem是菜单的属性Name名字
首先从字面上理解,Menu就是菜单,MenuStrip是菜单栏,MenuItem是菜单项,ToolStripMenuItem是工具栏菜单项
Menu是Form类的一个属性,winform里面貌似没有这么一个类
MenuStrip是菜单栏控件,是MenuItem(早期net的产物)的容器,ToolStripMenuItem则是MenuItem的改良版本
继续往下撒,这个跟treeview 是一样的啊,每一层对象都一样,只是父级不同而已
foreach (ToolStripMenuItem item in itemDropDownItems[i])
{
}
以上就是关于c#下怎样获得contextmenustrip动态添加的二级菜单项的文本全部的内容,包括:c#下怎样获得contextmenustrip动态添加的二级菜单项的文本、C#鼠标右键调用主菜单、一道C#窗体程序题!请路过高手指教!谢谢!等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)