C#TabControl-是否可以;禁用";个人标签页?

C#TabControl-是否可以;禁用";个人标签页?,c#,winforms,tabcontrol,C#,Winforms,Tabcontrol,是否有可能禁用选项卡控件的一个(或多个)选项卡?在某个时刻,我需要让用户停留在活动选项卡上,并阻止他离开。。。我知道我可以禁用整个TabControl组件,但这也会禁用活动tab上的所有组件 我还尝试使用TabControl的选择方法: private void TabControl_Selecting(object sender, TabControlCancelEventArgs e) { e.Cancel = PreventTabSwitch; } 这样做可

是否有可能禁用选项卡控件的一个(或多个)选项卡?在某个时刻,我需要让用户停留在活动选项卡上,并阻止他离开。。。我知道我可以禁用整个TabControl组件,但这也会禁用活动tab上的所有组件

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

private void TabControl_Selecting(object sender, TabControlCancelEventArgs e) {           
    e.Cancel = PreventTabSwitch;
}
这样做可以防止用户切换(如果PreventTabSwitch==true),但由于所有选项卡看起来都处于活动状态,只是没有反应,所以很混乱

没有为单个选项卡页启用属性,所以我不知道还能做什么


非常感谢您提前提供的所有提示。

IIRC,这是防止用户切换选项卡的唯一方法


我想你是在阻止他们离开,因为表单上的验证失败了?使用ErrorProvider组件将提供某种视觉提示,提示他们在切换选项卡之前需要做些什么。

我曾经有过类似的需求(我希望活动选项卡具有不同的背景颜色和其他内容)并最终创建了继承自
TabControl
&
TabPage
的新控件,我使用
OwnerDraw
来改变外观

您所做的是正确的方法,但它确实表明另一种选择是根据需要隐藏/显示页面。

  • TabControl-在上禁用/启用选项卡页

  • MSDN搜索“tabcontrol禁用的tabpage”位于


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

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;
    }

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

您始终可以将其与将TabControls字体的颜色更改为灰色相结合,使其看起来有点禁用。即使假设您使用了FlatTabControl并添加了自定义每页“启用”属性,你仍然会迷惑用户。如果您确实想这样做,可以使用Barry建议的ErrorProvider组件,或者在用户尝试切换选项卡时弹出一个消息框。制表符本质上是混乱和禁用的制表符,更是如此。并且可能会在某些用户中引起“UI小部件愤怒”。请注意隐藏方法
TabPage.Visible
有一个bug,它没有隐藏tab页-我读到它时有一个小想法,我遇到了隐藏TabPage的奇怪问题。但仍可以将对页面的引用存储在其他位置,并根据需要删除/插入。