如何:禁用选项卡页

在某些情况下,你会希望限制对 Windows 窗体应用程序中可用数据的访问。 例如,在选项卡控件的选项卡页中显示数据时;管理员可能会在你希望限制来宾或较低级别用户访问的选项卡页上拥有信息。

以编程方式禁用选项卡页

  1. 编写代码来处理选项卡控件的 SelectedIndexChanged 事件。 这是当用户从一个选项卡切换到下一个选项卡时引发的事件。

  2. 检查凭据。 根据所显示的信息,你可能希望在允许用户查看选项卡之前检查用户登录时使用的用户名或其他形式的凭据。

  3. 如果用户具有适当的凭据,则显示所单击的选项卡。 如果用户没有适当的凭据,则显示一个消息框或其他一些用户界面,指示他们没有访问权限,然后返回初始选项卡。

    注意

    在生产应用程序中实现此功能时,可以在窗体的 Load 事件期间执行此凭据检查。 这将允许你在显示任何用户界面之前隐藏选项卡,这是一种更简洁的编程方法。 下面使用的方法(在 SelectedIndexChanged 事件期间检查凭据并禁用选项卡)仅用于说明目的。

  4. (可选)如果你有两个以上的选项卡页,则显示不同于原始页的选项卡页。

    在下面的示例中,使用 CheckBox 控件代替检查凭据,因为访问选项卡的条件因应用程序而异。 引发 SelectedIndexChanged 事件时,如果凭据检查为 true(即复选框被选中)并且所选选项卡为 TabPage2(本例中为包含机密信息的选项卡),则会显示 TabPage2。 否则,将显示 TabPage3 并向用户显示一个消息框,指示他们没有适当的访问权限。 下面的代码假定窗体具有一个 CheckBox 控件 (CredentialCheck) 和一个包含三个选项卡页的 TabControl 控件。

    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++)将以下代码放在窗体的构造函数中以注册事件处理程序。

    this.tabControl1.SelectedIndexChanged +=
       new System.EventHandler(this.tabControl1_SelectedIndexChanged);  
    
    this->tabControl1->SelectedIndexChanged +=  
       gcnew System::EventHandler(this, &Form1::tabControl1_SelectedIndexChanged);  
    

另请参阅