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

状況によっては、Windows フォーム アプリケーション内で提供されているデータへのアクセスを制限したい場合もあるでしょう。 たとえば、タブ コントロールに複数のタブ ページがあって、その中の 1 つのタブ ページについては、ゲストや下位レベルのユーザーからのアクセスを制限したいといったような場合です。

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

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

  2. 資格情報を確認します。 表示される情報によっては、ユーザーがタブを表示できるようにする前に、そのユーザーがログインに使用したユーザー名やその他の形式の資格情報を確認する必要があります。

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

    注意

    運用アプリケーションにこの機能を実装する場合は、フォームの Load イベント時にこの資格情報確認を実行できます。 そうすれば、いずれのユーザー インターフェイスも表示されていない段階でタブを非表示にすることができます。このようにした方が、プログラミングのアプローチとしてはるかにスマートです。 次に示す方法 (資格情報を確認し、SelectedIndexChanged イベント時にタブを無効にする) は、説明用のものです。

  4. タブ ページが 2 つ以上ある場合は、必要に応じて、元のタブ ページとは異なるタブ ページを表示してください。

    次の例では、資格情報を確認する代わりに 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);  
    

関連項目