2014-02-12 25 views
-1

在我的WinForm应用程序中,我在窗体上绘制了一个矩形(System.Drawing.Rectangle)。在窗体中处理双击任意位置?

我需要的形式

上的任何地方处理双击我可以附加MouseDoubleClick事件处理程序的形式。只有在矩形外部进行双击时,它才有效。

我该如何做到这一点?

编辑:

我已经绘制一个矩形它的中央对齐,占地面积只有40%,则整个面积的WinForm的。当用户双击矩形我需要扩大矩形大小占据全屏。就这样!

编辑2:

我的朋友谁已经投下来,写评论,请这样我就可以改善,请!

+0

请您详细说明'但是,只有当双击在矩形外面时才有效?我想你并没有在形式上绘制它。大概你有一个面板控制到位或... –

+0

@SriramSakthivel我已经在窗体上绘制矩形,矩形不占用窗体的全部区域。 – Abhijeet

+0

@SriramSakthivel当对形状进行单击时,不会触发MouseDoubleClick。 – Abhijeet

回答

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

还记得,“双击”仅仅是两次单击,所以你将不得不监视和找出点击之间的时间来决定实际上代表双击的实际情况。

+0

“决定实际上代表双击的内容” - 您知道是否有时间差的标准?或者,这应该是关于UX.SE的问题吗? –

+1

我并不是UX/UI方面的专家,但根据维基百科[这里](http://en.wikipedia.org/wiki/Double-click),“连续两次点击所需的最大延迟时间被解释为双倍点击不标准化' –

0

不幸的是,由于System.Drawing仅为表单提供“图形”,Rectangle不包含任何触发任何事件(根本不包含任何事件)。

有一些选项(例如@drew_w提供),但是这种需要与COM对象交互的解决方法通常表明是时候重新评估需求了。

+0

我绘制了一个中心对齐的矩形,只覆盖了整个winform区域的40%。当用户双击矩形我需要扩大矩形大小占据全屏。就这样! – Abhijeet