处理双击表单中的任何位置?

时间:2014-02-12 19:03:19

标签: c# winforms visual-studio

在我的WinForm应用程序中,我在表单上绘制了一个矩形(System.Drawing.Rectangle)。

  

我需要在表单上的任意位置双击

我可以将MouseDoubleClick事件处理程序附加到表单。只有在矩形外部双击时才有效。

我如何实现这一目标?

修改

我绘制了一个中心对齐的矩形,仅占整个winform区域的40%。当用户双击矩形时,我需要扩展矩形大小以占据全屏。这就是全部!

编辑2:

我的朋友们已经投了票,请写评论,以便我可以改进,请!

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对象交互的变通方法通常表明是时候重新评估需求了。