我创建了一个Windows窗体应用程序,但是我从控件的Capture属性中得到了奇怪的行为。
在空白表单上,带有一个名为“label1”的标签和代码
{foo: ["bar", "baz"]}
我观察到,第一个WriteLine总是说“True”,第二个单击按钮时总是说“False”。即使多次点击也是如此。
标签永远不会对其边框外的点击做出反应,即使我使用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);
}
也不会。
我是否误解了“捕获”属性的预期行为?我希望初始值为false,并且标签不会对外部的点击作出反应,在第一次点击后我希望值为真,并且标签对所有鼠标点击作出反应,甚至在其边界之外。
答案 0 :(得分:1)
在MouseDown
事件中,控件的Capture
最初始终设置为true
。因此,通常如果您执行MouseDown
然后不释放鼠标按钮将鼠标移出控件然后释放鼠标按钮,则会触发控件的MouseUp
事件。
如果您在Capture
中将false
设置为MouseDown
,则只有当鼠标悬停在控件上并且将鼠标移出控件时,才会触发控件的鼠标按下事件您的控件然后释放鼠标按钮,您的控件的MouseUp
事件将不会升起。
同样在MouseUp
中,捕获将自动释放。
有关更多信息,请查看以下资源:
WmMouseUp方法源代码
CaptureInternal proprty源代码