我使用MouseLeave事件,以檢查用戶是否離開了我的形式,並關閉我的窗口,但使用 this.MouseLeave += new System.EventHandler(this.InvisibleForm_Leave);
太慢,只有當我要離開我的形式緩慢事件被解僱,以正常方式移動/更快一點我沒有得到假期事件。鼠標離開事件處理程序太慢
所以我想檢查我自己當鼠標離開了我的形式或不:
private void checkPos()
{
Rectangle rec = this.Bounds;
while (true)
{
Point point = new Point(Cursor.Position.X, Cursor.Position.Y);
if (!rec.Contains(point))
{
Console.WriteLine("leaving");
this.Close();
}
Thread.Sleep(100);
}
}
開始在自己的線程創建窗體後:
public MyForm()
{
InitializeComponent();
Thread m_mouseListenerThread = new Thread(new ThreadStart(this.checkPos));
m_mouseListenerThread.Start();
}
但是有了這個,我有或多或少同樣的問題,離開該地區唯一的一秒鐘之後仍然返回與rec.Contains(point)
檢查之後真他打算如果代碼來執行的,但有時他得到它在瞬間。
這個第二個問題是,我得到一個線程異常的this.Close();
線在checkPost()
方法:
跨線程操作無效:控制'MyForm的距離比其他線程訪問它創建的線程。
現在我真的不知道如何實現鼠標以其他方式留下部分。
它可能是緩慢的原因是'Thread.sleep代碼(500);'不趕你的鼠標在那段時間內 – 2012-04-20 11:42:43
我有它爲100ms,500ms的所述僅爲測試[淡入淡出爲表單]的 – dontcare 2012-04-20 11:45:03
可能重複(http://stackoverflow.com/questions/2927955/fading-in-and-淡出換一個形式) – 2012-04-20 11:59:53