如何获取动态生成的ContextMenuStrip点击项的文本?
你的代码存在两处问题:
- 重复声明变量
a_item,导致第一个添加的"A CONTEXT"项未绑定点击事件,还会被第二个项覆盖 - 点击事件里错误引用了不存在的
a_item_Click.text属性
直接修改代码即可实现需求:
修正后的完整代码
private void updateContext() { a_context_menu.Items.Clear(); foreach (var a_device in a_devices) { // 分别创建两个菜单项,各自绑定点击事件 var itemA = a_context_menu.Items.Add("A CONTEXT"); itemA.Click += a_item_Click; var itemB = a_context_menu.Items.Add("B CONTEXT"); itemB.Click += a_item_Click; } } private void a_item_Click(object sender, EventArgs e) { // 将sender转换为菜单项基类,获取点击项的文本 if (sender is ToolStripItem clickedItem) { MessageBox.Show(clickedItem.Text); } }
关键说明
- 每个菜单项需单独实例化并绑定事件,不能复用同一个变量,否则只有最后一个项会触发事件
- 点击事件的
sender参数就是被点击的菜单项本身,将其转换为ToolStripItem(ContextMenuStrip所有项的基类)后,即可直接读取Text属性 - 用
is运算符做类型检查,能避免类型转换失败引发异常
内容的提问来源于stack exchange,提问作者Air con kun
相关产品推荐
相关产品推荐

