2016-05-10 2 views
0

Я нашел некоторую реализацию свойства Enabled для tabPages, поскольку реализация для него в пользовательском интерфейсе скрыта, но я не знаю, как ее использовать. Это может показаться глупым вопросом, но я действительно начал работу с C# и платформы .net. Я хочу взять переменную из первой формы, которая является формой входа, которая отправляет истинное значение, если один флажок установлен или false, если это не так, и если это правда, войдите в систему как администратор, у которого есть привилегия для доступа ко всем вкладки, но если это ложь, пользователь будет ограничен доступом к некоторым вкладкам. Я не знаю, как ограничить доступ к этим вкладкам или разрешить это. Код выглядит следующим образом:C# .NET: вкладка TabControl отключена/включена реализация

код для конструктора формы:

public Form1() 
{ 
InitializeComponent(); 

this.tabControl1.DrawMode = 
TabDrawMode.OwnerDrawFixed; 
this.tabControl1.DrawItem += 
new DrawItemEventHandler(DisableTab_DrawItem); 
this.tabControl1.Selecting += 
new TabControlCancelEventHandler(DisableTab_Selecting); 
} 

функция, которая рисует закладки:

/// <summary> 
/// Draw a tab page based on whether it is disabled or enabled. 
/// </summary> 
/// <param name="sender"></param> 
/// <param name="e"></param> 
private void PageTab_DrawItem(object sender, DrawItemEventArgs e) 
{ 
TabControl tabControl = sender as TabControl; 
TabPage tabPage = tabControl.TabPages[e.Index]; 

if (tabPage.Enabled == false) 
{ 
using (SolidBrush brush = 
new SolidBrush(SystemColors.GrayText)) 
{ 
e.Graphics.DrawString(tabPage.Text, tabPage.Font, brush, 
e.Bounds.X + 3, e.Bounds.Y + 3); 
} 
} 
else 
{ 
using (SolidBrush brush = new SolidBrush(tabPage.ForeColor)) 
{ 
e.Graphics.DrawString(tabPage.Text, tabPage.Font, brush, 
e.Bounds.X + 3, e.Bounds.Y + 3); 
} 
} 
} 

обработчик события, который предотвращает вкладку от быть выбран если он отключен:

/// <summary> 
/// Cancel the selecting event if the TabPage is disabled. 
/// </summary> 
/// <param name="sender"></param> 
/// <param name="e"></param> 
private void PageTab_Selecting(object sender, TabControlCancelEventArgs e) 
{ 
if (e.TabPage.Enabled == false) 
{ 
e.Cancel = true; 
} 
} 

Указанная переменная и инструкция для принятия решения:

int cont = Login.accountType; //the variable from the first tab, that decides whether the account is admin type or client type 
     //the variable is public static int in the first form 

     if (cont == 1) 
     { 
      //display all the tabs, because we logged in as admin 
     } 
     else if(cont == 0) 
     { 
      //disable the tabs that we do not want the client to access 
     } 
+0

WinForms TabControl не знает, что такое заблокированная вкладка. Просто удалите вкладки, которые пользователи не должны видеть. – LarsTech

+0

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

+0

Так в чем проблема с кодом, который вы опубликовали? Где переменная, которую вы получаете от другой формы? – LarsTech

ответ

0

Я узнал, как использовать его, он не появляется в intellisense, вот что меня сначала смутило, но оно действительно работает.

int cont = Login.accountType; //the variable from the first tab, that decides whether the account is admin type or client type 
    //the variable is public static int in the first form 

    if (cont == 1) 
    { 
     tabControl1.TabPages[0].Enabled = true; 
     tabControl1.TabPages[1].Enabled = true; 
     tabControl1.TabPages[2].Enabled = true; 
     tabControl1.TabPages[3].Enabled = true; 
    } 
    else if(cont == 0) 
    { 
     tabControl1.TabPages[1].Enabled = false; 
    } 

Это позволит все вкладки для администратора, и он будет отключен для клиента вкладка один, который содержит текстовые поля для администратора, чтобы вставить новые учетные записи в базу данных MS-Access.

Смежные вопросы