我有一个自定义控件,需要能够进行语法上的单击,但是看来Button
是唯一实际上具有PerformClick()
函数的类。
我现在已经把它放在一起工作了,但是我希望此控件在调用它的过程中尽可能地兼容。
public void PerformClick() {
var mousePos = new Point(Width / 2, Height / 2);
OnMouseDown(new MouseEventArgs(MouseButtons.Left, 1, mousePos.X, mousePos.Y, 0));
Thread.Sleep(75);
OnMouseUp(new MouseEventArgs(MouseButtons.Left, 1, mousePos.X, mousePos.Y, 0));
OnMouseClick(new MouseEventArgs(MouseButtons.Left, 1, mousePos.X, mousePos.Y, 0));
OnClick(EventArgs.Empty);
}
OnMouseDown
> Thread.Sleep
> OnMouseUp
的作用是使该控件在从程序中单击时可以显示单击动画。
我想尽可能地模拟人为点击鼠标的感觉和可比性。我确实看到了使用user32.dll
函数mouse_event
(或类似的东西)的一些方法,该方法可以很好地工作,但是我找不到如何使控件的绝对位置传递给函数的方法。如果没有绝对位置,鼠标事件将被发送到错误的位置,并且很可能是错误的程序。