我有點奇怪的問題。 我的情況如下:C#Winforms - 編程式添加時防止偷取焦點的控制
我有一個表單,它包含幾個用戶控件,它們又包含其他用戶控件或其他基本控件,如TextBox,RichTextBox等。
作爲邏輯的一部分編輯文本框時,我編程方式創建另一個控制和通知的形式了。表單上的其他控件可能會反過來產生更多的控件。
麻煩的是,它們被創建並添加到窗體/其它控制器,這些控制從我的控制竊取焦點。
有沒有辦法阻止我的控制失去焦點,而這種情況發生?
我有點奇怪的問題。 我的情況如下:C#Winforms - 編程式添加時防止偷取焦點的控制
我有一個表單,它包含幾個用戶控件,它們又包含其他用戶控件或其他基本控件,如TextBox,RichTextBox等。
作爲邏輯的一部分編輯文本框時,我編程方式創建另一個控制和通知的形式了。表單上的其他控件可能會反過來產生更多的控件。
麻煩的是,它們被創建並添加到窗體/其它控制器,這些控制從我的控制竊取焦點。
有沒有辦法阻止我的控制失去焦點,而這種情況發生?
控件無法接受(竊取)焦點,除非它們可見並啓用。你有沒有嘗試用一種或兩種方法創建控件爲false,然後在適當時打開它們?
想到這一點,甚至儘可能地反映.NET assities,看看CanFocus/Focus檢查了什麼(儘管MSDN陳述了什麼),但是這似乎並沒有在所有情況下都有所幫助,而且我有時需要製作無論如何控制可見。 無論如何,我會將此標記爲答案,因爲這可能是最接近的事情。我的情況似乎更加細膩和生病玩弄這個看看。 謝謝。 –
@RanSagy你有沒有找到解決你的問題呢? –
也許你應該包括邏輯,該標籤索引第一,當你添加控件,設置選項卡索引到最後一個標籤指數+ 1,你的工作會更容易些,如果你設置的選項卡順序先上控件,並設置固定在設計時最後一個選項卡索引,看到這裏,:
private const int LAST_TAB_INDEX = 5; // an Example private int lastTabIndex = LAST_TAB_INDEX; private void AddControl(){ // Set up your control Control ctl = new Control(); // .... ctl.TabIndex = lastTabIndex; this.Add(ctl); this.lastTabIndex++; }
您可以從例如標籤指數是如何遞增看到,在這種方式,它會阻止 控件從偷竊的重點...
希望這會有所幫助, 最好的問候, 湯姆。
怎麼樣通過一個手柄引用具有焦點的控制,並使其,使得處理通過新實例化的控制採用集中返回到前一個? –
對於最終用戶來說這看起來太明顯了,因爲新實例化的控件可能是一個滾動頁面,所以這看起來有點太「跳躍」以至於無法使用。 –