一个SelectedIndexChanged事件中的多个选项卡控件

时间:2014-08-21 13:57:46

标签: c# tabcontrol

我在标签控件中有标签控件,如下所示: enter image description here

我用3个SelectedIndexChanged个事件,但我将它们合并为一个。

    private void MaintabControler_SelectedIndexChanged(object sender, EventArgs e)
    {
        _currentGlobalTable = "None Selected";
        string SelectedTab = tabControl1.SelectedTab.Name.ToString();

        // Contacts_Table
        if (SelectedTab == "mainTab1") 
        {
            this.contacts_TableTableAdapter.Fill(this.nexusDBDataSet.Contacts_Table);
            _currentGlobalBindingSource = contacts_TableBindingSource;
            _currentGlobalTable = "Contacts_Table";
        }

        // CallRegister_Table
        else if (SelectedTab == "mainTab2")
        {...some more code here...

我正在使用代码动态更新数据集,datagridview和bindingNavigator。 问题是我不知道如何判断选项卡是否“假设显示”。我不知道它是父项还是子项tabControle。

    private void MaintabControler_SelectedIndexChanged(object sender, EventArgs e)
    {
        SelectedTab = tabControl1.SelectedTab.Name.ToString();
        if (SelectedTab == "mainTab1") \\ This is true, and its the tab that is "suppose" to show

        SelectedTab = tabControl2.SelectedTab.Name.ToString();
        if (SelectedTab == "subTab1") \\ This is true too so the incorrect data gets loaded to the datagrid
    }

我想保留这一个事件,而不是恢复到之前的3个事件。主要是因为我可以在表单加载时调用该事件。但也将所有这些保留在一个咏叹调下并调用一个简单的刷新事件。

2 个答案:

答案 0 :(得分:1)

如果我理解你的要求:

事件处理程序上的object sender参数将包含触发事件的选项卡控件。将其强制转换为制表符控件,以了解您是在父级还是子级制表符控件事件中。

这样的事情:

TabControl currentControl = (TabControl)sender;
if (currentControl.Equals(tabControl1)
{
    ...

答案 1 :(得分:1)

您还可以像这样检查所选标签:

    private void MaintabControler_SelectedIndexChanged(object sender, EventArgs e)
    {
if (tab1.SelectedTab == tab1.TabPages["mainTab1"])
        {
            // your stuff
        }
}