如何动态设置TabPage的活动控件?

时间:2014-08-12 22:54:26

标签: c# winforms tabcontrol tabpage

我不是在问如何设置表单的活动控件(我知道如何操作)。我在TabPage内有2个TabControl,我希望每当选择某个TabPage时,某个TabPage的控件就会成为{{{}的主动控件1}}。

我尝试过类似的东西:

SelectedTab

这当然有效,但如果我想改变我的程序/ if (searcher_tabControl.SelectedIndex == 0) this.ActiveControl = findWhat_find_textBox; else//SelectedIndex == 1 this.ActiveControl = findWhat_replace_textBox; 的设计,我应该修改这个控制流程(如果我记得的话)。

你知道更好的解决方法吗?

2 个答案:

答案 0 :(得分:2)

使用TabControl将其放在Form的构造函数中:

tabControl1.SelectedIndexChanged += (s, e) =>
    ActiveControl = tabControl1.SelectedTab.Controls.Cast<Control>()
                               .SingleOrDefault(x => x.TabIndex == 0);

每次切换标签时,它都会选择TabIndex为0的控件(如果有)。

您必须确保要设置为&#34;有效&#34;标签页中的TabIndex为0。如果您忘记将1设置为0,则不会将控件设置为&#34;激活&#34; (也不会抛出任何例外)。


  

你如何称呼添加和事件处理程序?我从未见过在C#中使用=>运算符。

这是一种内联方法。如果将其与设置事件方法的正常方式进行比较,则sobject sendereEventArgs e,lambda运算符后的语句为=> {1}}是要为该事件执行的代码。如果你想执行多行代码,你可以用大括号括起来:

... += (s, e) => { something(); somethingElse(); };

或者,由于我们实际上没有对参数做任何事情,您也可以说:

tabControl1.SelectedIndexChanged += delegate
{
    ActiveControl = tabControl1.SelectedTab.Controls.Cast<Control>()
                               .SingleOrDefault(x => x.TabIndex == 0);
};

您使用的任何方法,这些或您习惯的方式,最终结果都是相同的。另见:https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/statements-expressions-operators/lambda-expressions

答案 1 :(得分:2)

我不知道每个标签页上的控件是什么,所以我的示例着重于控件,第一个tabindex是活动的.Have说订阅了tabControl上的Selected事件并放置了这段代码:

private void tabControl1_Selected(object sender, TabControlEventArgs e)
{
    this.ActiveControl = e.TabPage.Controls.OfType<Control>().OrderBy(c => c.TabIndex).First();
}