C# 如何从默认上下文菜单(组合框)检测单击
我在Winforms C#项目中有一个组合框。当用户右键单击组合框以打开上下文菜单,然后从默认上下文菜单中选择一个项目(左键单击)时,我希望能够捕获该事件。我应该处理哪些事件 是否可以在不创建自定义ContextMenuStrip的情况下执行此操作?如果我必须自己制作,有没有一个好方法可以使用Windows默认ContextMenuStrip作为起点 编辑: 这个问题类似:C# 如何从默认上下文菜单(组合框)检测单击,c#,.net,winforms,.net-3.5,C#,.net,Winforms,.net 3.5,我在Winforms C#项目中有一个组合框。当用户右键单击组合框以打开上下文菜单,然后从默认上下文菜单中选择一个项目(左键单击)时,我希望能够捕获该事件。我应该处理哪些事件 是否可以在不创建自定义ContextMenuStrip的情况下执行此操作?如果我必须自己制作,有没有一个好方法可以使用Windows默认ContextMenuStrip作为起点 编辑: 这个问题类似: 但它是在讨论将项目添加到默认菜单。我问的是如何从默认上下文菜单中选择一项来捕获事件。如果我需要自定义ContextMen
但它是在讨论将项目添加到默认菜单。我问的是如何从默认上下文菜单中选择一项来捕获事件。如果我需要自定义ContextMenuStrip来执行此操作,那很好,请这样回答。对不起,我最初误解了这个问题,但现在修改了我的答案,向您展示如何从上下文菜单中检测单击 在寻找解决方案时,我遇到了许多指向WinProc的文章。沿着那条大街走下去,我遇到了以下几件事
public partial class TextBoxUsingDefaultContextMenu : TextBox
{
public TextBoxUsingDefaultContextMenu()
{
InitializeComponent();
}
protected override void WndProc(ref Message m)
{
const int WM_CONTEXTMENU = 0x007B;
const int WM_MENUCOMMAND = 0x0126;
const int WM_COMMAND = 0x0111;
switch (m.Msg)
{
case WM_CONTEXTMENU:
MessageBox.Show("Opening Context Menu");
break;
case WM_MENUCOMMAND:
MessageBox.Show("WM Menu Command Event fired");
break;
case WM_COMMAND:
MessageBox.Show("WM Command Event fired");
break;
}
base.WndProc(ref m);
}
protected override void DefWndProc(ref Message m)
{
base.DefWndProc(ref m);
}
}
通过上面的代码,我可以检测到“上下文菜单打开”事件,但尚未检测到单击事件。这里的任何帮助都会受到他人的感谢,甚至这个话题对我来说也是新的。有几个
ContextMenuStrip
事件可能会对您有所帮助。
MouseClick
事件为您提供一个MouseEventArgs
参数,其中包括单击的鼠标按钮。
ItemClicked
事件为您提供了一个ToolStripItemClickedEventArgs
参数,其中包括已单击的菜单项。
MouseClick
在itemclick
之前触发,您需要使用在表单类级别定义的变量在两者之间进行通信。只需在ContextMenua上注册click事件,如何为默认ContextMenuStrip执行此操作?ContextMenuStrip似乎有一个onclick
事件--您可以覆盖它这可能是吗?我很感谢你们的帮助,但你们似乎都没有完全解决我询问默认ContextMenuStriph的问题。很抱歉,我以为你们在询问自定义ContextMenuI。我同意,我将按照此方法开发自定义ContextMenuStrip。但是,我看不到有关从默认Windows上下文检测事件的任何信息。感谢您更新您的答案。我将检查此解决方案。Hello@ford,我可以检测WM_CONTEXTMENU事件。我无法检测WM_命令或WM_菜单命令。如果你能让它工作,你能告诉我吗。非常感谢!罗穆卢斯,谢谢你的帮助。看起来我现在的答案是“制作自己的自定义上下文菜单要容易得多”。