我不是在问如何设置表单的活动控件(我知道如何操作)。我在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;
的设计,我应该修改这个控制流程(如果我记得的话)。
你知道更好的解决方法吗?
答案 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#中使用
=>
运算符。
这是一种内联方法。如果将其与设置事件方法的正常方式进行比较,则s
为object sender
,e
为EventArgs 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();
}