控制.捕捉总是正确的
本文关键字:控制 | 更新日期: 2023-09-27 18:02:43
我创建了一个Windows窗体应用程序,但是我从控件的Capture属性中得到奇怪的行为。
在空白表单上,有一个名为"label1"的标签和代码
public Form1()
{
InitializeComponent();
label1.MouseDown += pictureBox1_MouseDown;
}
void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
Debug.WriteLine(label1.Capture);
label1.Capture = !label1.Capture;
Debug.WriteLine(label1.Capture);
}
我观察到,当按钮被点击时,第一个WriteLine总是说"True",第二个总是说"False"。即使点击多次。
标签永远不会对其边界外的点击做出反应,即使我使用label1.Capture = true
也不会。
我是否误解了"Capture"属性的预期行为?我希望初始值为false,并且标签不会对外部的单击做出反应,在第一次单击之后,我希望该值为true,并且标签对所有鼠标单击做出反应,甚至在其边界之外。
在MouseDown
事件中,控件的Capture
初始总是设置为true
。所以通常情况下,如果你执行MouseDown
,然后没有释放鼠标按钮,将鼠标移出控件,然后释放鼠标按钮,控件的MouseUp
事件将被触发。
如果在MouseDown
中将Capture
设置为false
,则控件的鼠标向上事件仅在鼠标位于控件上时触发,如果将鼠标移出控件并释放鼠标按钮,则控件的MouseUp
事件不会触发。
同样在MouseUp
中,捕获将自动释放。
有关更多信息,请查看以下资源:
- WmMouseDown方法源代码
-
WmMouseUp方法源代码
-
CaptureInternal源代码
-
SetCapture文件
- ReleaseCapture文件