2012-02-14 38 views
2

此問題與this my question有關。現在我已經在我的課堂上學習了,當用戶點擊按鈕時,我顯示(或隱藏)了表格。沒關係。但是當我用原始形式移動或者當我點擊原始形式的某處時,我想隱藏表單。新形式落後於原始形式。我正在嘗試像lostFocus和其他人一樣的事件,但它沒有幫助。所以我想我需要一些技巧來檢查我的控制是否有點擊parrent形式(原始形式)或其他黑客。我知道最好的是我放置代碼,但我有很多行,所以我認爲最好的方式是,如果你以一般方式幫助我,然後嘗試應用到我的應用程序。隱藏形式何時是其他控件重點

回答

0

你可以用全局鼠標和鍵盤hook來做到這一點。事實上,它已被封裝到有據可查的結構良好的.NET API中,在CodePlex

轉到那裏並下載它。然後,建立一個全球性的鼠標鉤子:

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

這裏的關鍵是,你將ANYWHERE鼠標移動接收MouseMove事件的任何時間在桌面上,不只是你的窗口的範圍內。

private void HandleAppHookMouseMove(object sender, MouseEventArgs e) 
{ 

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

您還可以設置一個MouseClick。兩者的結合將使您可以隨時確定鼠標移過原點的形式,或者在鼠標點擊它時點擊鼠標。與您嘗試的LostFocus和其他事件不同,重點是無關緊要的。

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; 
    } 
}