簡體   English   中英

將焦點設置到上一個控件

[英]Setting focus to previous control

我遇到拆分器面板失去控制的問題,需要重新設置。

我的應用程序使用SplitContainer; 當我的控件將數據加載到拆分器的panel2中時,焦點轉移到了panel1上。

在兩個面板中都有tabStop = true的控件,因為tab和shift + tab都需要在面板和拆分器上都起作用。

要重新設置它,請在GotFocus中添加一個Panel2控制控件對象,並在panel1的_enter中使用此對象將焦點重新設置在panel2中。 但是,我需要重設此控制對象。 我無法在panel2的_leave中執行此操作,因為在設置后退控件時,將再次調用GotFocus。

我認為您應該實現這些行為的狀態管理,以同步控件的事件。 例如,您可以使用一些與控件對象的狀態相關的標志,然后在GotFocus事件中通過一些測試驗證它們的值...



在清除注釋后進行更新。

在有關控件的焦點相關事件的Msdn上,您發現“ Enter”事件始終是事件鏈中的第一個事件,第二個始終是“ GotFocus”。 請參閱: https : //msdn.microsoft.com/it-it/library/system.windows.forms.control.gotfocus(v=vs.110).aspx

您可以在“ Enter”事件中評估控件焦點狀態變量,並在“ GotFocus”事件中對其進行分配,從而避免在請假事件中重置任何內容。

這樣,您應該始終了解先前的控件集中在每個控件的“輸入”處理程序中(可以對所有控件使用相同的處理程序)並提出您的要求。

如果您需要在多個面板中管理一些拆分的控件,則還可以實現一個字典,該詞典將控件所關注的每個面板映射起來,因此,如果您從一個面板切換到另一個面板,您可能總是會知道該面板中具有焦點的最后一個控件。

我嘗試了多種解決方案,並且最安全的選項似乎是在panel2中的控件獲得焦點時關閉panel1控件上的選項卡控件,並在它離開焦點時重新打開它。 這樣可以確保應用程序重點不會轉移到panel1上。 這還將確保我的控件可以進行制表和shift_tabbing操作。 強制將焦點設置回panel2中的控件會多次觸發gotfocus(),這超出了目的

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM