在我的WinForm应用程序中,我在表单上绘制了一个矩形(System.Drawing.Rectangle)。
我需要在表单上的任意位置双击
我可以将MouseDoubleClick
事件处理程序附加到表单。只有在矩形外部双击时才有效。
我如何实现这一目标?
修改
我绘制了一个中心对齐的矩形,仅占整个winform区域的40%。当用户双击矩形时,我需要扩展矩形大小以占据全屏。这就是全部!
编辑2:
我的朋友们已经投了票,请写评论,以便我可以改进,请!
答案 0 :(得分:1)
我知道做你想要的最好的方法是使用“WndProc”方法。这允许您在将消息发送到表单之前从消息队列中收集“消息”(事件)。然后,您可以选择响应这些事件或允许它们继续正常的消息过程。有关详细信息,请查看MSDN page here。
如何使用它的简短示例:
protected override void WndProc(ref Message m)
{
// http://msdn.microsoft.com/en-us/library/windows/desktop/hh454920(v=vs.85).aspx
// 0x210 is WM_PARENTNOTIFY
// 513 is WM_LBUTTONCLICK
if (m.Msg == 0x210 && m.WParam.ToInt32() == 513)
{
var x = (int)(m.LParam.ToInt32() & 0xFFFF);
var y = (int)(m.LParam.ToInt32() >> 16);
var childControl = this.GetChildAtPoint(new Point(x, y));
if (childControl == cancelButton)
{
// ...
}
}
base.WndProc(ref m);
}
此示例的信用是:this stack question。
请记住,“双击”只需两次单击,因此您必须自己监控并找到点击之间的时间,以确定实际上代表双击的内容。
答案 1 :(得分:0)
不幸的是,由于System.Drawing仅为表单提供“grahpics”,因此Rectangle不包含任何事件(根本不包含)。
有一些选项(例如由@drew_w提供)但是这些需要与COM对象交互的变通方法通常表明是时候重新评估需求了。