代码之家  ›  专栏  ›  技术社区  ›  FosterZ

tabcontrol selectedindex changed事件未被触发C#

c#
  •  2
  • FosterZ  · 技术社区  · 14 年前

    嘿,伙计们,我有个小问题,请看下面的代码

    // 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 方法so tab_selectedindexchanged 事件应该被解雇对吗?但事实并非如此。。

    我在google上搜索过这个问题,所以我发现一个线程说,在加载所有控件之前,它们的事件填充不会被触发,但我认为这不正确,因为所有控件都只在构造函数中加载并初始化。。所以我对这个问题很困惑。

    4 回复  |  直到 14 年前
        1
  •  5
  •   Cody Gray    14 年前

    这个 SelectedIndexChanged 事件从未引发,因为 违约 SelectedIndex 是0。 当你设置 选定索引 表单中的0 Load 事件处理程序,所选索引实际上不会更改为新值,因此不会引发事件。

    有两种可能的解决方法:

    1. 您可以重构以下情况的初始化代码 SelectedIndex == 0 转到另一个方法,然后从 选定索引已更改 事件处理程序和表单的 装载 事件处理程序。

    2. 你可以设置 选定索引 到中除0以外的索引 装载 事件处理程序,然后立即将其设置回0。这将导致 选定索引 值更改两次,但将得到预期结果。

        2
  •  2
  •   user895964user895964    13 年前

    我遇到了几乎相同的问题(在我的例子中,我在表单的构造函数中设置SelectedIndex,但我使用的是非零值——SelectedIndexChanged事件没有触发)。

    在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            
        }
    
        3
  •  0
  •   Cheng Chen    14 年前

    你登记了吗?类似于:

    tabAddRemoveOperator.SelectedIndexChanged += new EventHandler(tabAddRemoveOperator_SelectedIndexChanged);
    
        4
  •  0
  •   Todd    11 年前

    我想出了另一种方法来强制SelectedIndexChanged事件在form_load中触发。将窗体“加载”中的DeselectTab()设置为控件上的最后一个选项卡。取消选择最后一个选项卡将导致索引移动到选项卡0并生成SelectedIndexChanged事件。