次の方法で共有


方法: タブ ページを無効にする

場合によっては、Windows フォーム アプリケーション内で使用できるデータへのアクセスを制限する必要があります。 例えば、タブ コントロールのタブページにデータが表示されている場合、管理者はゲストまたは下位レベルのユーザーから制限したい情報をタブページに持っていることがあります。

プログラムでタブ ページを無効にするには

  1. タブ コントロールの SelectedIndexChanged イベントを処理するコードを記述します。 これは、ユーザーが 1 つのタブから次のタブに切り替えたときに発生するイベントです。

  2. 資格情報を確認します。 表示される情報に応じて、ユーザーがログインしているユーザー名またはその他の形式の資格情報を確認してから、ユーザーにタブの表示を許可することができます。

  3. ユーザーが適切な資格情報を持っている場合は、クリックされたタブを表示します。 ユーザーが適切な資格情報を持っていない場合は、アクセス権がないことを示すメッセージ ボックスまたはその他のユーザー インターフェイスを表示し、最初のタブに戻ります。

    運用アプリケーションでこの機能を実装すると、フォームの Load イベント中にこの資格情報チェックを実行できます。 これにより、ユーザー インターフェイスが表示される前にタブを非表示にできます。これは、プログラミングに対するよりクリーンなアプローチです。 以下で使用する手法 (資格情報の確認と SelectedIndexChanged イベント中のタブの無効化) は、説明を目的とします。

  4. 必要に応じて、複数のタブ ページがある場合は、元のタブ ページとは異なるタブ ページを表示します。

    次の例では、タブへのアクセス条件がアプリケーションによって異なるため、資格情報を確認する代わりに、CheckBox コントロールが使用されます。 SelectedIndexChanged イベントが発生したときに、資格情報チェックが true (つまり、チェック ボックスがオン) で、選択したタブが TabPage2 されている場合 (この例では、機密情報を含むタブ)、TabPage2 が表示されます。 それ以外の場合は、TabPage3 が表示され、適切なアクセス特権がなかったことを示すメッセージ ボックスがユーザーに表示されます。 次のコードでは、CheckBox コントロール (CredentialCheck) を持つフォームと、3 つのタブ ページを含む 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);
    

こちらも参照ください