C#静态添加左键菜单、联系关系数据及相干变乱利
奇闻趣事 2023-05-04 17:38www.bnfh.cn奇闻趣事
C#动态添加右键菜单、关联数据及相关事件使用的示例
上次研究了一下正常的菜单,今天来研究一下控件的右键菜单项,差不太多。
先添加2个右键菜单控件,一个直接添加菜单,另一个用来动态添加菜单
分别给label1和label2关联菜单
直接上代码了
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Draing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windos.Forms;
namespace yjcd
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
//直接给写好的菜单加事件
//主要是遍历所有菜单及子菜单
//根据点击菜单文本做出判断
AddMenuEvents(contextMenuStrip1);
//动态添加菜单,并添加事件
//可以用递归来添加子菜单
//这里我只加了一层
//加了 tag 属性传递数据
GetMenus();
}
//测试的数据源
DataTable GetDT()
{
DataTable mydt = ne DataTable();
DataColumn dc0 = mydt.Columns.Add("ID", typeof(Int32));
DataColumn dc1 = ne DataColumn();
mydt.Columns.Add(dc1);
for (int i = 0; i < 5; i++)
{
DataRo neRo = mydt.NeRo();
neRo[0] = i;
//这个用来做与菜单关联的数据
//实际上想传什么就传什么
//MenuCMD 中会用到
neRo[1] = i + 100;
//在面插入数据
mydt.Ros.Add(neRo);
}
return mydt;
}
void GetMenus()
{
DataTable dt = GetDT();
int ro = dt.Ros.Count;
for (int i = 0; i < ro; i++)
{
contextMenuStrip2.Items.Add(dt.Ros[i][0].ToString().Trim());
contextMenuStrip2.Items[i].Tag = dt.Ros[i][1].ToString().Trim();
}
AddMenuEvents(contextMenuStrip2);
}
void AddMenuEvents(ContextMenuStrip m)
{
foreach (ToolStripItem items in m.Items)
{
if (items is ToolStripMenuItem)
{
ChildMenu((ToolStripMenuItem)items);
}
}
}
void ChildMenu(ToolStripMenuItem menu)
{
if (menu.HasDropDonItems)
{
foreach (ToolStripMenuItem m in menu.DropDonItems)
{
ChildMenu(m);
}
}
else
{
menu.Click += ne EventHandler(MenuCMD);
}
}
void MenuCMD(object sender, EventArgs e)
{
ToolStripMenuItem ts = (sender as ToolStripMenuItem);
string thecmdstr = ts.Text;
string thetag = "没有";
if(ts.Tag != null) { thetag = ts.Tag.ToString(); }
sitch (thecmdstr)
{
case "AA":
label2.Text = "AA";
break;
case "0":
label2.Text = "数据为 " + thetag;
break;
default:
break;
}
}
}
}