// 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;
}
我的问题是,我正在更改tab selectedindex
form_load
方法,因此tab_selectedindexchanged
事件会被解雇吗?但它不是..
我已经搜索了这个问题,所以我发现一个帖子说,直到你的控件加载他们的事件填充没有被解雇,但我不认为它是正确的,因为所有控件都被加载n只在构造函数初始化..所以我对这个问题感到困惑。
答案 0 :(得分:5)
永远不会引发SelectedIndexChanged
事件,因为默认 SelectedIndex
为0。当您将SelectedIndex
设置为0时表单的Load
事件处理程序,所选索引实际上不会更改为新值,因此事件永远不会被提升。
我想到了两种可能的解决方法:
您可以重构SelectedIndex == 0
出另一个方法的情况的初始化代码,然后从SelectedIndexChanged
事件处理程序和表单的Load
调用该方法事件处理程序。
您可以在SelectedIndex
事件处理程序中将Load
设置为0以外的索引,然后立即将其设置为0.这将导致SelectedIndex
值改变两次,但会有预期的结果。
答案 1 :(得分:2)
我有几乎相同的问题(在我的情况下,我在表单的构造函数中设置了SelectedIndex,但我使用了非零值 - 并且没有触发SelectedIndexChanged事件。)
我在一个带有短延迟的表单上放置一个Timer,在InitializeComponent调用之后在构造函数中启用它。在计时器的Tick事件中,我禁用了计时器(因此它只发生了一次)并在那里设置了tab控件的SelectedIndex(并且SelectedIndexChanged事件确实触发了)。
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
}
答案 2 :(得分:0)
您是否注册了活动?类似的东西:
tabAddRemoveOperator.SelectedIndexChanged += new EventHandler(tabAddRemoveOperator_SelectedIndexChanged);
答案 3 :(得分:0)
我想出了另一种强制在form_load中触发SelectedIndexChanged事件的方法。将form_load中的DeselectTab()设置为控件上的最后一个选项卡。取消选择最后一个选项卡将导致索引移动到选项卡0并生成SelectedIndexChanged事件。