Я нашел некоторую реализацию свойства 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
}
WinForms TabControl не знает, что такое заблокированная вкладка. Просто удалите вкладки, которые пользователи не должны видеть. – LarsTech
Да, но это означало бы добавление их обратно каждый раз, когда я загружаю TabControl, и у администратора есть все привилегии. –
Так в чем проблема с кодом, который вы опубликовали? Где переменная, которую вы получаете от другой формы? – LarsTech