Как я могу отключить вкладку внутри TabControl? - PullRequest
70 голосов
/ 06 января 2009

Есть ли способ отключить вкладку в TabControl ?

Я использую C #.

Ответы [ 23 ]

85 голосов
/ 06 января 2009

Приведите TabPage к элементу управления, затем установите для свойства Enabled значение false.

((Control)this.tabPage).Enabled = false;

Поэтому заголовок вкладки будет по-прежнему включен, но его содержимое будет отключено.

66 голосов
/ 06 января 2009

Класс TabPage скрывает свойство Enabled. Это было сделано намеренно, так как с ним возникла неуклюжая проблема дизайна пользовательского интерфейса. Основная проблема заключается в том, что отключение страницы также не отключает вкладку. И если попытаться обойти это, отключив вкладку с событием Selecting, то она не будет работать, если у TabControl есть только одна страница.

Если эти проблемы с юзабилити вас не касаются, имейте в виду, что свойство все еще работает, оно просто скрыто от IntelliSense. Если FUD неудобен, вы можете просто сделать это:

public static void EnableTab(TabPage page, bool enable) {
    foreach (Control ctl in page.Controls) ctl.Enabled = enable;
}
61 голосов
/ 11 октября 2012

Вы можете просто использовать:

tabPage.Enabled = false;

Это свойство не отображается, но работает без проблем.

Вы можете запрограммировать событие Selecting на TabControler, чтобы сделать невозможным переход к нередактируемой вкладке:

private void tabControler_Selecting(object sender, TabControlCancelEventArgs e)
{
    if (e.TabPageIndex < 0) return;
    e.Cancel = !e.TabPage.Enabled;
}
42 голосов
/ 06 января 2009

Вы можете зарегистрировать событие «Выбор» и отменить переход к закладке:

private void tabControl1_Selecting(object sender, TabControlCancelEventArgs e)
{
    if (e.TabPage == tabPage2)
        e.Cancel = true;
}

Другая идея состоит в том, чтобы поместить все элементы управления на вкладку в элементе управления Panel и отключить панель! Smiley

Вы также можете удалить вкладку из коллекции tabControl1.TabPages. Это скрыло бы вкладку.

Кредиты поступают на littleguru @ Channel 9 .

13 голосов
/ 29 июля 2009

Предположительно, вы хотите видеть вкладку в элементе управления вкладками, но вы хотите, чтобы она была "отключена" (то есть, серой и недоступной для выбора). Для этого нет встроенной поддержки, но вы можете переопределить механизм рисования, чтобы получить желаемый эффект.

Примером того, как это сделать, является , предоставленное здесь .

Волшебство в этом фрагменте из представленного источника и в методе DisableTab_DrawItem:

this.tabControl1.DrawMode = TabDrawMode.OwnerDrawFixed;
this.tabControl1.DrawItem += new DrawItemEventHandler( DisableTab_DrawItem );
10 голосов
/ 30 сентября 2012

Распространение ответа Cédric Guillemette после отключения Control:

((Control)this.tabPage).Enabled = false;

... вы можете обработать событие TabControl Selecting как:

private void tabControl_Selecting(object sender, TabControlCancelEventArgs e)
{
    e.Cancel = !((Control)e.TabPage).Enabled;
}
7 голосов
/ 20 ноября 2011

Это удалит страницу вкладки, но вам нужно будет повторно добавить ее, когда вам это нужно:

tabControl1.Controls.Remove(tabPage2);

Если вам это понадобится позже, вы можете сохранить его на временной вкладке перед удалением, а затем повторно добавить его при необходимости.

5 голосов
/ 06 января 2009

Единственный способ - перехватить событие Selecting и предотвратить активацию вкладки.

1 голос
/ 15 августа 2016

tabControl.TabPages.Remove (tabPage1);

1 голос
/ 06 января 2009

Я должен был справиться с этим некоторое время назад. Я удалил вкладку из коллекции TabPages (думаю, что это так) и добавил ее обратно, когда условия изменились. Но это было только в Winforms, где я мог держать вкладку, пока она мне снова не понадобилась.

...