2011-01-25 26 views
3

我有一個UserControl可以有childcontrol。C#:如何禁止UserControl將焦點放在第一個子控件?

用戶控件具有樣式:

this.SetStyle(
      ControlStyles.AllPaintingInWmPaint | 
      ControlStyles.OptimizedDoubleBuffer | 
      ControlStyles.Selectable | 
      ControlStyles.SupportsTransparentBackColor | 
      ControlStyles.UserPaint, 
      true);

現在,如果我點擊用戶控件(不是子控制)我想在用戶控件保持焦點,但焦點會自動轉到第一個兒童安全控制。 如果我使用Tab鍵,會發生同樣的事情。

我已經試圖覆蓋OnGotFocus沒有成功。

有什麼想法?

+0

TabStop爲您的控件啓用? – 2011-01-25 15:24:58

回答

3

這是UserControl類中的硬編碼行爲,它捕獲WM_SETFOCUS消息並將焦點傳遞給子控件。我不知道重寫這個的方法,即使在WndProc()中捕獲它也行不通,因爲沒有好的辦法讓UC基類來處理它。

最好的方法是避免戰鬥,並使用停靠的面板控件作爲您希望UC處理的焦點事件的替身。這也需要一些黑客攻擊,Panel也是一個容器控制,但可以繞過。檢查出my answer here爲一個可調焦的面板。

相關問題