2012-01-31 3 views
3

Мне действительно не нужно их отключать, потому что я либо отключил TabControl, либо включил его. Но когда TabControl отключен, я хочу, чтобы страницы вкладок были отключены (выделены серым цветом).Есть ли способ отключить TabPage внутри TabControl?

+1

это 'WinForms'? – Tigran

+0

Возможный дубликат: http://stackoverflow.com/questions/418006/how-can-i-disable-a-tab-inside-a-tabcontrol. Лучший ответ на этот вопрос: http://stackoverflow.com/a/418033/635634 –

+0

Да, извините, забыл упомянуть об этом. –

ответ

6

Что упомянутые ниже люди не будут делать трюк индивидуально, но в совокупности они будут. Попробуйте это:

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
     //Disable tabPage2 
     this.tabPage2.Enabled = false; // no casting required. 
     this.tabControl1.Selecting += new TabControlCancelEventHandler(tabControl1_Selecting); 
     this.tabControl1.DrawMode = TabDrawMode.OwnerDrawFixed; 
     this.tabControl1.DrawItem += new DrawItemEventHandler(DisableTab_DrawItem); 
    } 
    private void DisableTab_DrawItem(object sender, DrawItemEventArgs e) 
    { 
     TabControl tabControl = sender as TabControl; 
     TabPage page = tabControl.TabPages[e.Index]; 
     if (!page.Enabled) 
     { 
      //Draws disabled tab 
      using (SolidBrush brush = new SolidBrush(SystemColors.GrayText)) 
      { 
       e.Graphics.DrawString(page.Text, page.Font, brush, e.Bounds.X + 3, e.Bounds.Y + 3); 
      } 
     } 
     else 
     { 
      // Draws normal tab 
      using (SolidBrush brush = new SolidBrush(page.ForeColor)) 
      { 
       e.Graphics.DrawString(page.Text, page.Font, brush, e.Bounds.X + 3, e.Bounds.Y + 3); 
      } 
     } 
    } 

    private void tabControl1_Selecting(object sender, TabControlCancelEventArgs e) 
    { 
     //Cancels click on disabled tab. 
     if (!e.TabPage.Enabled) 
      e.Cancel = true; 
    } 
} 
+0

Спасибо, я просто попытался, но не вижу свойства Enabled в элементах управления вкладками. Как ты получил свою? –

+0

Вы также можете использовать его. ((Control) tabPage2) .Enabled = false; Я тестировал оба пути, и они работают. – Corylulu

+0

Хорошо, дайте мне попробовать. –

3

Попробуйте использовать этот код он работает:

private void tabControl1_Selecting(object sender, TabControlCancelEventArgs e) 
     { 
      if (e.TabPage == tabControl1.TabPages[1]) 
      { 
       e.Cancel = true; 
      }    
     } 

Keep индекс или имя TabPage вы хотите отключить в состоянии, если здесь я сохранил индекс как 1. :)

2

Рекоммендованное решение, предоставленное @Corylulu для инкапсулирования всего в самом управлении.

public class DimmableTabControl : TabControl 
{ 
    public DimmableTabControl() 
    { 
     DrawMode = TabDrawMode.OwnerDrawFixed; 
     DrawItem += DimmableTabControl_DrawItem; 
     Selecting += DimmableTabControl_Selecting; 
    } 

    private void DimmableTabControl_DrawItem(object sender, DrawItemEventArgs e) 
    { 
     TabPage page = TabPages[e.Index]; 
     using(SolidBrush brush = new SolidBrush(page.Enabled ? page.ForeColor : SystemColors.GrayText)) 
     { 
      e.Graphics.DrawString(page.Text, page.Font, brush, e.Bounds.X + 3, e.Bounds.Y + 3); 
     } 
    } 

    private void DimmableTabControl_Selecting(object sender, TabControlCancelEventArgs e) 
    { 
     if(!e.TabPage.Enabled) 
     { 
      e.Cancel = true; 
     } 
    } 
} 
Смежные вопросы