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