当其他控件集中时隐藏表单

时间:2012-02-14 12:21:57

标签: c# windows winforms visual-studio-2008 focus

此问题与this my question有关。现在我在班上有表格,当用户点击按钮时我会显示(或隐藏)表格。没关系。但是当我使用原始形式移动或者当我点击原始形式的某个地方时,我想要隐藏形式。新形式是原始形式的背后。我正在尝试像lostfocus和其他人一样的活动,但它没有帮助。因此,我认为我需要一些技巧,从我的控制中检查是否存在单独的形式(原始形式)或其他一些黑客。我知道最好的是我放了代码,但我有很多行,所以我认为最好的方法是,如果你以一般方式帮助我,然后我尝试应用到我的应用程序。

2 个答案:

答案 0 :(得分:0)

以下有帮助吗?

public partial class Form1 : Form
{
    Form f2 = new Form2();
    public Form1()
    {
        InitializeComponent();
        f2.Show();
    }

    private void Form1_MouseMove(object sender, MouseEventArgs e)
    {
        if (this.ClientRectangle.Contains(e.Location) && f2.Visible) { f2.Hide(); }
    }

    private void button1_Click(object sender, EventArgs e)
    {
        f2.Visible = !f2.Visible ? true : false;
    }
}

答案 1 :(得分:0)

您可以使用全局鼠标和键盘hook来完成此操作。事实上,它已被包含在CodePlex

的文档良好,结构良好的.NET API中

去那边下载吧。然后,设置一个全局鼠标钩子:

    _mouseListener = new MouseHookListener(new GlobalHooker());
    _mouseListener.MouseMove += HandleGlobalHookMouseMove;
    _mouseListener.Start();

这里的关键是,任何时候鼠标都会在桌面上移动,而不仅仅是在窗口的范围内,您将收到MouseMove事件。

 private void HandleAppHookMouseMove(object sender, MouseEventArgs e)
 {

        if (this.Bounds.Contains(e.Location))
        {
              HandleEnter();
        }
        else
        {
              HandleLeave();
        }          
  }

您还可以为MouseClick设置一个。两者的组合将使您能够确定鼠标在原始形式上移动的任何时间,或者鼠标在其上方时单击鼠标。与您尝试的LostFocus和其他事件不同,焦点无关紧要。