C # TabControl - возможно ли "отключить" отдельные TabPages? - PullRequest
2 голосов
/ 10 июня 2010

Можно ли как-то отключить одну (или несколько) вкладок управления вкладками? В какой-то момент мне нужно заставить пользователя оставаться на активной вкладке и не дать ему уйти ... Я знаю, что могу отключить весь компонент TabControl, но это также отключает все компоненты на активной вкладке ...

Я также пытался использовать метод выбора TabControl:

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

Это работает, предотвращает переключение пользователя (если PreventTabSwitch == true), но поскольку все вкладки выглядят активными и просто не реагируют, это сбивает с толку ...

Нет свойства Enabled для отдельных вкладок, поэтому я не знаю, что еще делать ...

Большое спасибо за все советы.

Ответы [ 5 ]

1 голос
/ 10 июня 2010

IIRC, это единственный способ запретить пользователю переключать вкладки.

Я предполагаю, что вы не позволяете им уйти, поскольку проверка формы не удалась?Использование компонента ErrorProvider предоставит некоторую визуальную подсказку, что им нужно что-то сделать перед переключением вкладок.

0 голосов
/ 01 сентября 2014

Если вы хотите отменить изменение вкладки, вы можете использовать событие Отмена выбора.Там вы можете отменить изменение, установив для свойства Свойство Cancel предоставленных TabControlCancelEventArgs значение true.

0 голосов
/ 15 февраля 2014

Пользователь не может нажимать на вкладки для навигации, но они могут использовать две кнопки (Далее, Назад).Пользователь не может перейти к следующему, если // условия не выполнены

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;
    }
0 голосов
/ 10 июня 2010
0 голосов
/ 10 июня 2010

Однажды у меня была похожая потребность (я хотел, чтобы активная вкладка имела другой цвет фона и некоторые другие вещи), и в итоге я создал новые элементы управления, унаследованные от TabControl & TabPage, где я использовал OwnerDraw дляизмените внешний вид.

То, что вы делаете, - это правильный путь в соответствии с MSDN , но он предлагает другой вариант - скрыть / показать страницы по мере необходимости.

...