C#TabControl - 是否可以“禁用”单个TabPages?

时间:2010-06-10 11:52:59

标签: c# winforms tabcontrol

以某种方式可以禁用选项卡控件的一个(或多个)选项卡吗?在某些时候我需要让用户留在活动选项卡上并阻止他离开...我知道我可以禁用整个TabControl组件,但是这也会禁用活动选项卡上的所有组件......

我也尝试使用TabControl的选择方法:

private void TabControl_Selecting(object sender, TabControlCancelEventArgs e) {           
    e.Cancel = PreventTabSwitch;
}

这样可以阻止用户切换(如果PreventTabSwitch == true),但由于所有标签看起来都很活跃而且没有反应就让人感到困惑......

单个标签页没有Enabled属性,所以我不知道还能做什么......

提前感谢所有提示。

5 个答案:

答案 0 :(得分:1)

IIRC,这是防止用户切换标签的唯一方法。

我认为你阻止他们离开,因为表单上的验证失败了?使用ErrorProvider组件将提供某种视觉提示,他们需要在切换标签之前执行某些操作。

答案 1 :(得分:0)

我曾经有类似的需求(我希望活动标签有不同的背景颜色和其他一些东西)并最终创建继承自TabControl&的新控件。 TabPage我使用OwnerDraw来改变外观。

根据MSDN,你正在做的是正确的方法,但它确实建议另一个选择是根据需要隐藏/显示页面。

答案 2 :(得分:0)

答案 3 :(得分:0)

用户无法单击选项卡进行导航,但他们可以使用两个按钮(下一步,后退)。如果不满足//条件,则用户无法继续下一个

private int currentTab = 0;

private void frmOneTimeEntry_Load(object sender, EventArgs e)
    {
        tabMenu.Selecting += new TabControlCancelEventHandler(tabMenu_Selecting);
    }
private void tabMenu_Selecting(object sender, TabControlCancelEventArgs e)
    {
        tabMenu.SelectTab(currentTab);
    }
private void btnNextStep_Click(object sender, EventArgs e)
    {
        switch(tabMenu.SelectedIndex)
        {
            case 0:
                //if conditions met GoTo
            case 2:
                //if conditions met GoTo
            case n:
                //if conditions met GoTo
        {
        CanLeaveTab:
            currentTab++;
             tabMenu.SelectTab(tabMenu.SelectedIndex + 1);
            if (tabMenu.SelectedIndex == 3)
                btnNextStep.Enabled = false;
            if (btnBackStep.Enabled == false)
                btnBackStep.Enabled = true;

        CannotLeaveTab:
        ;

    }

    private void btnBackStep_Click(object sender, EventArgs e)
    {
        currentTab--;
        tabMenu.SelectTab(tabMenu.SelectedIndex - 1);
        if (tabMenu.SelectedIndex == 0)
            btnBackStep.Enabled = false;
        if (btnNextStep.Enabled == false)
            btnNextStep.Enabled = true;
    }

答案 4 :(得分:0)

如果要取消选项卡的更改,可以使用取消选择事件。在那里,您可以通过将提供的TabControlCancelEventArgs的属性取消设置为true来取消更改。