动态添加CONTEXTMENUstrip的子菜单后,无法响应CLICK

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了动态添加CONTEXTMENUstrip的子菜单后,无法响应CLICK相关的知识,希望对你有一定的参考价值。

用 Public WithEvents menuCopy As ContextMenuStrip
Public WithEvents menuReplace As ContextMenuStrip
Public WithEvents menuChange As ContextMenuStrip
也测试了,用ADDHANDLER后提示错误!

代码如下
Public Class Form1
Dim menuCopy As ToolStripMenuItem
Dim menuReplace As ToolStripMenuItem
Dim menuChange As ToolStripMenuItem

Private Sub ContextMenuStrip1_Opening(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles ContextMenuStrip1.Opening

'ContextMenuStrip1 = New ContextMenuStrip
ContextMenuStrip1.Items.Clear()

If ContextMenuStrip1.SourceControl Is textbox1 Then
ContextMenuStrip1.Items.Add("menuCopy")
ContextMenuStrip1.Items.Add("menuReplace")
ElseIf ContextMenuStrip1.SourceControl Is PictureBox1 Then
ContextMenuStrip1.Items.Add("menuChange")
End If
End Sub
END CLASS
请说详细点。
我可以添加成功,但是点击后没反映,不知道怎么响应到添加的子菜单的_click事件

t)这个方法是不行的,用下面的这个方法增加你的子菜单
ToolStripItem item = new ToolStripMenuItem("b");
item.Click+=new EventHandler(item_Click);
this.contextMenuStrip1.Items.Add(item);

然后定义一个名为Item_Click的方法,如下
void item_Click(object sender, EventArgs e)

//你要做的操作
throw new NotImplementedException();
参考技术A 具体操作发放发至你的站内消息了,请注意查收!
又不明白的地方,我们可以相互讨教!
站内消息留了我的邮箱了!

参考资料:weijiexinling 原创回答

本回答被提问者采纳

ContextMenuStrip 动态添加多级子菜单

1.首先要实例化几个ToolStripItem(要为某一父菜单添加几个子菜单就实例化几个);方法如下:

/*添加子菜单*/
ToolStripItem ts_1 = new ToolStripMenuItem("正常");

 2.将其添加到ContextMenuStrip

((ToolStripDropDownItem)(contextMenuStrip1.Items[1])).DropDownItems.Add(ts_1);

按上面这个模式可以添加多级的。写到这里,还是不知道怎么响应子菜单的执行。这个时候就要借住委托和事件了

3.其实,在实例化后ToolStripItem后要为实例化的ToolStripItem对象添加新的事件,然后再添加到ContextMenuStrip控件。

代码如下:

ts_1.Click+=new EventHandler(ts_1_Click);

 4.接下来就是完成ts_1_Click这个方法了。当子菜单被单击的时候将会响应现在这个新方法。代码如下:

/*添加的"正常"子菜单Click事件*/
private void ts_1_Click(object sender, EventArgs e)
{
          /*当添加的这个子菜单被单击时响应的操作写在这里面*/
}

5.如果要添加多个子菜单就要为每一个子菜单写一个Click事件。

到此此文就结束了。

 

加一些自己的代码以便参考:

//动态添加多级子菜单
        private void addContextMenuStrip()
        {
            this.contextMenuStrip1.Items.Add("修改");
            this.contextMenuStrip1.Items.Add("状态");
            this.contextMenuStrip1.Items.Add("删除");

            /*添加子菜单*/
            ToolStripItem ts_1 = new ToolStripMenuItem("正常");
            ts_1.Click += new EventHandler(ts_1_Click);
            /*只能通过ContextMenuStrip的Item的索引为其添加子菜单,通过Item的Text属性会报错*/
            ((ToolStripDropDownItem)(contextMenuStrip1.Items[1])).DropDownItems.Add(ts_1);
            ToolStripItem ts_2 = new ToolStripMenuItem("维修");
            ts_2.Click += new EventHandler(ts_2_Click);
            ((ToolStripDropDownItem)(contextMenuStrip1.Items[1])).DropDownItems.Add(ts_2);
            ToolStripItem ts_3 = new ToolStripMenuItem("建设中");
            ts_3.Click += new EventHandler(ts_3_Click);
            ((ToolStripDropDownItem)(contextMenuStrip1.Items[1])).DropDownItems.Add(ts_3);

        }
        /*子菜单Click事件*/
        private void ts_1_Click(object sender, EventArgs e)
        {
            ToolStripItem item = (ToolStripItem)sender;
            MessageBox.Show(item.Text);
        }
        /*子菜单Click事件*/
        private void ts_2_Click(object sender, EventArgs e)
        {
            ToolStripItem item = (ToolStripItem)sender;
            MessageBox.Show(item.Text);
        }
        /*子菜单Click事件*/
        private void ts_3_Click(object sender, EventArgs e)
        {
            ToolStripItem item = (ToolStripItem)sender;
            MessageBox.Show(item.Text);
        }

 

以上是关于动态添加CONTEXTMENUstrip的子菜单后,无法响应CLICK的主要内容,如果未能解决你的问题,请参考以下文章

ContextMenuStrip 动态添加多级子菜单

[DevExpress] GridControl添加右键菜单

C#如何实现动态添加右键菜单

C# 系统应用之ListView控件 .添加ContextMenuStrip右键菜单打开删除文件

如何在DataGridView上添加“右键菜单”

delphi 动态添加系统菜单