tabcontrol selectedindex changed事件未被触发C#
嘿,伙计们,我有一个很小的问题,请看下面的代码tabcontrol selectedindex changed事件未被触发C#,c#,C#,嘿,伙计们,我有一个很小的问题,请看下面的代码 // this is main load private void Form1_Load(object sender, EventArgs e) { tabAddRemoveOperator.SelectedIndex = 0; } //this is selected index changed event method private void tabAddRemoveOperator_SelectedIndexChanged(obj
// this is main load
private void Form1_Load(object sender, EventArgs e)
{
tabAddRemoveOperator.SelectedIndex = 0;
}
//this is selected index changed event method
private void tabAddRemoveOperator_SelectedIndexChanged(object sender, EventArgs e)
{
if (tabAddRemoveOperator.SelectedIndex == 0)
//someCode;
else if (tabAddRemoveOperator.SelectedIndex == 1)
//someCode;
}
我的问题是,我正在更改form\u load
方法上的tab selectedindex
,所以tab\u selectedindex changed
事件应该被触发,对吗?但事实并非如此
我在谷歌上搜索过这个问题,所以我发现一个线程说,在你的控件加载之前,它们的事件填充不会被触发,但我不认为这是正确的,因为所有控件都是在构造函数中被加载和初始化的。。因此,我对这个问题感到困惑。您已经注册了活动吗?比如:
tabAddRemoveOperator.SelectedIndexChanged += new EventHandler(tabAddRemoveOperator_SelectedIndexChanged);
从不引发
SelectedIndex Changed
事件,因为默认的SelectedIndex
为0。在表单的Load
事件处理程序中将SelectedIndex
设置为0时,所选索引实际上不会更改为新值,因此事件永远不会引发
我想到了两种可能的解决方法:
SelectedIndex==0
输出到另一个方法的情况,您可以重构初始化代码,然后从SelectedIndexChanged
事件处理程序和表单的Load
事件处理程序调用该方法Load
事件处理程序中将SelectedIndex
设置为非0的索引,然后立即将其设置回0。这将导致SelectedIndex
值更改两次,但会产生预期结果我遇到了几乎相同的问题(在我的例子中,我在表单的构造函数中设置SelectedIndex,但是我使用了一个非零值——SelectedIndexChanged事件没有触发)。 在InitializeComponent调用之后,我在表单上放置了一个带有短延迟的计时器,并在构造函数中启用了它。在计时器的滴答声事件中,我禁用了计时器(因此它只发生一次),并在那里设置选项卡控件的SelectedIndex(SelectedIndexChanged事件确实触发)
我想出了另一种方法来强制在表单加载中触发SelectedIndexChanged事件。将表单_load中的deselectab()设置为控件上的最后一个选项卡。取消选择最后一个选项卡将导致索引移动到选项卡0并生成SelectedIndexChanged事件。查看位于的
SelectedIndex
处理程序,发现TabControl
在未设置其属性的早期阶段不会触发某些事件。所以你拖延行动的方式是有道理的
public MainForm(string[] args)
{
InitializeComponent();
// tabControl1.SelectedIndex = 2; // Did not fire
OnceAtStartupTimer.Enabled = true;
}
private void OnceAtStartupTimer_Tick(object sender, EventArgs e)
{
OnceAtStartupTimer.Enabled = false;
tabControl1.SelectedIndex = 2;
}
private void tabControl1_SelectedIndexChanged(object sender, EventArgs e)
{
// Code to run when SelectedIndex changes
}