[英]How to set the active control of a TabPage dynamically?
我不是在問如何設置窗體的活動控件(我知道該怎么做)。 我有2 TabPage
秒的范圍內TabControl
和每當特定我想的是TabPage
被選擇時,在一定TabPage
的控制成為主動控制SelectedTab
。
我已經嘗試過類似的方法:
if (searcher_tabControl.SelectedIndex == 0)
this.ActiveControl = findWhat_find_textBox;
else//SelectedIndex == 1
this.ActiveControl = findWhat_replace_textBox;
這當然現在可以了,但是如果我想更改程序/ TabControl
的設計,則應該修改此控制流程(如果我記得的話)。
您知道解決這個問題的更好方法嗎?
使用TabControl將其放置在Form的構造函數中:
tabControl1.SelectedIndexChanged += (s, e) =>
ActiveControl = tabControl1.SelectedTab.Controls.Cast<Control>()
.SingleOrDefault(x => x.TabIndex == 0);
每次切換標簽時,它都會選擇TabIndex
為0的控件(如果有)。
您必須確保要設置為“活動”的控件在選項卡頁面中的TabIndex
為0。 如果忘記將1設置為0,則不會將任何控件設置為“活動”(也不會引發任何異常)。
您如何稱呼這種添加方式和事件處理程序? 我從未見過在C#中使用
=>
運算符。
那是一個內聯方法。 如果將其與設置事件方法的常規方法進行比較,則s
是object sender
, e
是EventArgs e
,lambda運算符=>
之后的語句是針對該事件執行的代碼。 如果要執行多行代碼,請將它們括在花括號中:
... += (s, e) => { something(); somethingElse(); };
另外,由於我們實際上並沒有對參數做任何事情,因此您也可以說:
tabControl1.SelectedIndexChanged += delegate
{
ActiveControl = tabControl1.SelectedTab.Controls.Cast<Control>()
.SingleOrDefault(x => x.TabIndex == 0);
};
您使用的任何方法,這些方法或習慣的方法,最終結果都是相同的。 另請參閱: https : //docs.microsoft.com/zh-cn/dotnet/csharp/programming-guide/statements-expressions-operators/lambda-expressions 。
我不知道在每個選項卡上打算使用什么控件,因此我的示例着重於第一個tabindex為活動控件的控件。說了話,請在tabControl上訂閱Selected事件並放置以下代碼:
private void tabControl1_Selected(object sender, TabControlEventArgs e)
{
this.ActiveControl = e.TabPage.Controls.OfType<Control>().OrderBy(c => c.TabIndex).First();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.