How to: Disable Tab Pages
On some occasions, you will want to restrict access to data that is available within your Windows Forms application. One example of this might be when you have data displayed in the tab pages of a tab control; administrators could have information on a tab page that you would want to restrict from guest or lower-level users.
To disable tab pages programmatically
Write code to handle the tab control's SelectedIndexChanged event. This is the event that is raised when the user switches from one tab to the next.
Check credentials. Depending upon the information presented, you may want to check the user name the user has logged in with or some other form of credentials before allowing the user to view the tab.
If the user has appropriate credentials, display the tab that was clicked. If the user does not have appropriate credentials, display a message box or some other user interface indicating that they do not have access, and return to the initial tab.
Note
When you implement this functionality in your production applications, you can perform this credential check during the form's Load event. This will allow you to hide the tab before any user interface is shown, which is a much cleaner approach to programming. The methodology used below (checking credentials and disabling the tab during the SelectedIndexChanged event) is for illustrative purposes.
Optionally, if you have more than two tab pages, display a tab page different from the original.
In the example below, a CheckBox control is used in lieu of checking the credentials, as the criteria for access to the tab will vary by application. When the SelectedIndexChanged event is raised, if the credential check is true (that is, the check box is checked) and the selected tab is
TabPage2
(the tab with the confidential information, in this example), thenTabPage2
is displayed. Otherwise,TabPage3
is displayed and a message box is shown to the user, indicating they did not have appropriate access privileges. The code below assumes a form with a CheckBox control (CredentialCheck
) and a TabControl control with three tab pages.Private Sub TabControl1_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles TabControl1.SelectedIndexChanged ' Check Credentials Here If CredentialCheck.Checked = True And _ TabControl1.SelectedTab Is TabPage2 Then TabControl1.SelectedTab = TabPage2 ElseIf CredentialCheck.Checked = False _ And TabControl1.SelectedTab Is TabPage2 Then MessageBox.Show _ ("Unable to load tab. You have insufficient access privileges.") TabControl1.SelectedTab = TabPage3 End If End Sub
private void tabControl1_SelectedIndexChanged(object sender, System.EventArgs e) { // Check Credentials Here if ((CredentialCheck.Checked == true) && (tabControl1.SelectedTab == tabPage2)) { tabControl1.SelectedTab = tabPage2; } else if ((CredentialCheck.Checked == false) && (tabControl1.SelectedTab == tabPage2)) { MessageBox.Show("Unable to load tab. You have insufficient access privileges."); tabControl1.SelectedTab = tabPage3; } }
private: System::Void tabControl1_SelectedIndexChanged( System::Object ^ sender, System::EventArgs ^ e) { // Check Credentials Here if ((CredentialCheck->Checked == true) && (tabControl1->SelectedTab == tabPage2)) { tabControl1->SelectedTab = tabPage2; } else if ((CredentialCheck->Checked == false) && (tabControl1->SelectedTab == tabPage2)) { MessageBox::Show(String::Concat("Unable to load tab. ", "You have insufficient access privileges.")); tabControl1->SelectedTab = tabPage3; } }
(Visual C#, Visual C++) Place the following code in the form's constructor to register the event handler.
this.tabControl1.SelectedIndexChanged += new System.EventHandler(this.tabControl1_SelectedIndexChanged);
this->tabControl1->SelectedIndexChanged += gcnew System::EventHandler(this, &Form1::tabControl1_SelectedIndexChanged);
See also
.NET Desktop feedback