簡體   English   中英

如何動態設置TabPage的活動控件?

[英]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#中使用=>運算符。

那是一個內聯方法。 如果將其與設置事件方法的常規方法進行比較,則sobject sendereEventArgs 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.

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