我有一個文本框和一個列表框,我希望列表框僅在文本框或列表框處於關注狀態時纔可見。從列表框開始將不可見。然後當文本框被關注時,列表框應該是可見的。只有在丟失焦點並且沒有收到它的情況下,列表框纔會再次變得不可見。所以我想實現的是下面在任何時候都爲真:檢測哪個控件是活動的
listBox.Visible = textBox.Focused || listBox.Focused
在我的解決方案文本框和/或列表框可以是標準型的專業化(如果這簡化了解決方案) 。
我試着在兩個控件LostFocus和GotFocus事件上進行偵聽,並設置了列表框的可見性。然而GotFocus事件在列表框中從來沒有被調用,因爲當文本框失去焦點時我將它變爲不可見。
有沒有人有如何做到這一點的建議?我的備份計劃(我不喜歡)是當一個人失去焦點時啓動一個計時器,如果另一個人獲得焦點,則啓動計時器。所以一個「乾淨」的方式來實現它將不勝感激;)
編輯:我正在開發這個被用作.NET WinForms自定義控件。
編輯2:
看來,我沒有解釋自己相當受用。所以我會試着解釋我想要更明確地達到什麼。
我在創建一個新的TextBox類型(繼承幾年前構建的現有類型的TextBox)。 TextBox目前作爲一個通用的集合(包括實現IList的子類型)的對象。 TextBox定義了一個ListBox,它根據一組標準顯示集合中元素的一個子集。當TextBox被添加到父控件時,ListBox也是如此。因此,這兩個工作可以作爲搜索元素蒐集的一種設置。與開始鍵入時瀏覽器提供建議時的排序相同。
我使用此設置而不是包含兩個控件的UserControl,因爲後者將導致用戶控件是兩個控件的大小或(當大小與TextBox匹配時)ListBox不可見。
我意識到我可以選擇處理添加此控件的窗體中的所有控件上的GotFocus或Enter事件。這是我想到的一個非常直接的方法,但我更願意編寫一個控件,它不會在窗體中的每個其他控件上進行監聽。
我希望這個澄清。
我的這種方法唯一的問題是我開發一個自定義的控制(我也許應該提到的),因此我會必須爲所有控件添加處理程序,因爲此自定義控件已添加到窗體或面板中。添加/刪除所有這些處理程序的過程(包括向表單添加/刪除控件時)將很快導致一系列事件。另外,沒有任何其他類型的處理程序被添加到控件中。 – DeadDog
此外,沒有「OnFocus」事件。我認爲你的意思是「GotFocus」事件,並且你的事件處理程序是正確命名的。 – DeadDog
你使用什麼技術? WPF? ASP.NET?的WinForms?自定義控件包含什麼?只有TextBox和ListBox? –