我正在實施一個繼承自Control
的自定義控件。我希望它是可以聚焦的(這是一種列表框)。我真的必須在我的自定義控件的OnMouseDown中調用Focus嗎?
在構造函數中,我做
SetStyle(ControlStyles.Selectable, true);
我現在可以使用Tab鍵導航到控制。
但是,當控件收到鼠標點擊時,它不會自動聲明焦點。當然,我可以解決這個問題:
protected override void OnMouseDown(MouseEventArgs e)
{
Focus();
base.OnMouseDown(e);
}
但是,這感覺就像一個不應該是必要的kludge。這真的是要走的路嗎?或者有什麼方法可以讓Control
在接收到鼠標點擊時自動聲稱焦點?
@Thomas:你提到「我已經有了焦點矩形到位」:你是通過覆蓋OnGotFocus和OnLostFocus並調用ControlPaint.DrawFocusRectangle來做到這一點?感謝任何迴應。 – BillW
@BillW:是的,這就是我所做的。 「OnGotFocus」和「OnLostFocus」使包含焦點矩形的矩形失效; 'OnPaint'檢查'Focused'屬性並根據需要調用'ControlPaint.DrawFocusRectangle'。 – Thomas
您的病人對我的問題的反應非常感謝!我發佈了一個更多答案,這是我可以在Visual Studio RC1中針對FrameWork 3.5(完整版)編譯的唯一方法。通過「工作」:我的意思是,當控件是「tabbed-to」時,它會顯示一個選擇矩形,當「tabbed-away-from」選擇矩形消失時:單擊Control時,將顯示選擇矩形。 – BillW