修改
似乎任何Panel都存在问题(尽管不是每个Control)。相应地更改了标题。但问题主要在于SplitContainer
,因为内部无法点击区域。
原始:
在以下情况中,SplitContainer中存在忽略事件的区域:
SplitContainer
并为安全措施设置它(和它的
面板')填充和边距为0. System.Media.SystemSounds.Asterisk.Play();
放在那个处理程序中。BorderStyle = BorderStyle.Fixed3D
。现在,当点击大部分区域时,会听到声音,但是在面板和分割器之间的边界上 - 它不是。
如何修复(当然不改变BorderStyle)?
答案 0 :(得分:0)
您可以在WM_SETCURSOR
消息的边框中查看鼠标是否已关闭:
protected override void WndProc(ref Message m)
{
base.WndProc(ref m);
if (m.Msg == 0x0020) //WM_SETCURSOR
{
//wParam is the window handle where the cursor is over
if ( m.WParam == splitContainer1.Panel1.Handle || m.WParam == splitContainer1.Panel2.Handle )
{
if ( ((int)m.LParam & 0xFFFF) == 18 ) //low 16bits of lParam -> HTBORDER
if ( (((int)m.LParam & 0xFFFF0000) >> 16) == 0x0201) //hight 16bits -> WM_LBUTTONDOWN
{
//mouse is down
}
}
}
}
}
如果您想查看click event
,请使用WM_LBUTTONDOWN
更改WM_LBUTTONUP