【发布时间】:2016-08-17 15:07:26
【问题描述】:
我创建了一个 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 代替。
我是否误解了“捕获”属性的预期行为?我希望初始值为 false,并且标签不会对外部点击做出反应,在第一次点击后,我希望该值是 true,并且标签会对所有鼠标点击做出反应,即使在其边界之外。
【问题讨论】:
-
对两个控件使用相同的事件处理程序很容易造成混淆。当您单击标签时,您肯定会得到 True。当然,当您单击图片框时为 False。 Winforms 使用 Capture 属性可靠地生成 Click 事件并在触发 MouseDown 事件之前将其打开。这是必要的,因此当您将鼠标拖到控件边界之外后释放鼠标时,not 会引发 Click 事件。自己使用 Capture 属性(如“对外部点击做出反应”)不太可能奏效。