2012-01-17 80 views
0

所以我有一個面板上的鼠標輸入和鼠標離開我改變了它停靠在它的一些控制的可見性。停止「兒童」控制措施的重點?

問題是,只要我將鼠標懸停在面板內的控件上,鼠標輸入就會移動到該單個控件,從而使它們不可見。

有沒有什麼辦法可以使這項工作無需爲面板中的每個控件編寫這兩個事件?

乾杯:)

+0

[Panel not getting focus]的可能重複(http://stackoverflow.com/questions/3562235/panel-not-getting-focus) – 2012-01-17 21:29:34

回答

1

有趣的問題。如果你把一個Console.WriteLine放在MouseEnter或MouseLeave中,你會注意到當你的鼠標移動到控件上時,它隱藏起來,這會導致鼠標重新回到面板上,然後顯示導致控件隱藏的控件...

我想出瞭如何完成請求的唯一方法是刪除MouseEnter和MouseLeave事件。然後我將一個MouseMove事件添加到包含該面板的窗體中。我還爲面板添加了一個MouseMove事件。這兩個事件都會調用一個例程來檢查鼠標的座標,以確定它是否在面板上。如果MouseCheck例程返回true,則顯示控件,如果不是則隱藏它們。下面的示例是C#,但我相信你可以抓住這個想法。

private bool MouseCheck(Control ctl, Point point) 
    { 
     bool blnRet = false; 

     if (point.X < ctl.Left) 
     { 
      blnRet = false; 
     } 
     else if (point.X > ctl.Left + ctl.Width) 
     { 
      blnRet = false; 
     } 
     else if (point.Y < ctl.Top) 
     { 
      blnRet = false; 
     } 
     else if (point.Y > ctl.Top + ctl.Height) 
     { 
      blnRet = false; 
     } 
     else 
     { 
      blnRet = true; 
     } 

     return blnRet; 
    }