如何:禁用选项卡页

在某些情况下,你需要限制对 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);
    

另请参阅