【发布时间】:2013-07-24 15:28:50
【问题描述】:
当我右键单击 ListView 列标题时,我会显示不同的 ContextMenuStrip,而在 ListView 内显示另一个。
class ListViewExx : ListView
{
public ContextMenuStrip HeaderContextMenu { get; set; }
int contextMenuSet = 0;
protected override void WndProc(ref System.Windows.Forms.Message m)
{
base.WndProc(ref m);
switch(m.Msg)
{
case 0x210: //WM_PARENTNOTIFY
contextMenuSet = 1;
break;
case 0x21: //WM_MOUSEACTIVATE
contextMenuSet++;
break;
case 0x7b: //WM_CONTEXTMENU
if(contextMenuSet == 2 && HeaderContextMenu != null)
HeaderContextMenu.Show(Control.MousePosition);
break;
}
}
}
这很好用。问题是我第一次在 ListView 内右键单击 - 显示了标题 contextMenuStrip。
【问题讨论】:
-
我觉得还有一种简单的方法,我不是很理解你代码中的
WM_PARENTNOTIFY和其他消息,看起来WM_PARENTNOTIFY是发送到你的ListView和@987654326 @ 跟随,这使您的contextMenuSet=2。你应该确保这些消息应该在你想要的时间发送,我认为这个解决方案不可靠,应该避免,除非你彻底理解WM_PARENTNOTIFY和WM_MOUSEACTIVATE在哪些情况下被发送到你的ListView。跨度> -
我对这段代码也不太了解,我在codeproject(在commnents)中找到了它并且运行良好。 codeproject.com/Articles/23330/…