Control.Capture总是如此?

时间:2016-08-17 15:07:27

标签: c# winforms

我创建了一个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,并且标签不会对外部的点击作出反应,在第一次点击后我希望值为真,并且标签对所有鼠标点击作出反应,甚至在其边界之外。

1 个答案:

答案 0 :(得分:1)

MouseDown事件中,控件的Capture最初始终设置为true。因此,通常如果您执行MouseDown然后不释放鼠标按钮将鼠标移出控件然后释放鼠标按钮,则会触发控件的MouseUp事件。

如果您在Capture中将false设置为MouseDown,则只有当鼠标悬停在控件上并且将鼠标移出控件时,才会触发控件的鼠标按下事件您的控件然后释放鼠标按钮,您的控件的MouseUp事件将不会升起。

同样在MouseUp中,捕获将自动释放。

有关更多信息,请查看以下资源: