2016-05-10 15 views
0

UIの実装が隠されているため、TabPagesのEnabledプロパティの一部の実装が見つかりましたが、使用方法がわかりません。それは愚かな質問として打つかもしれませんが、私は本当にC#と.netプラットフォームから始めました。最初のフォームから変数を取ってきます。これは、1つのチェックボックスがチェックされている場合は真の値を、そうでない場合は真偽値を送信するログインフォームです。それが真であれば、すべてにアクセスするためのprivillegeを持つ管理者としてログインします。それが偽であれば、ユーザはいくつかのタブからのアクセスを制限されます。私はどのようにこれらのタブへのアクセスを制限するか、それを許可するかわかりません。コードは以下の通りである:C#.NET:TabControlのTabPageが無効化または有効化された実装

コードフォームのコンストラクタのために:

public Form1() 
{ 
InitializeComponent(); 

this.tabControl1.DrawMode = 
TabDrawMode.OwnerDrawFixed; 
this.tabControl1.DrawItem += 
new DrawItemEventHandler(DisableTab_DrawItem); 
this.tabControl1.Selecting += 
new TabControlCancelEventHandler(DisableTab_Selecting); 
} 

タブページを描画する機能:

/// <summary> 
/// Draw a tab page based on whether it is disabled or enabled. 
/// </summary> 
/// <param name="sender"></param> 
/// <param name="e"></param> 
private void PageTab_DrawItem(object sender, DrawItemEventArgs e) 
{ 
TabControl tabControl = sender as TabControl; 
TabPage tabPage = tabControl.TabPages[e.Index]; 

if (tabPage.Enabled == false) 
{ 
using (SolidBrush brush = 
new SolidBrush(SystemColors.GrayText)) 
{ 
e.Graphics.DrawString(tabPage.Text, tabPage.Font, brush, 
e.Bounds.X + 3, e.Bounds.Y + 3); 
} 
} 
else 
{ 
using (SolidBrush brush = new SolidBrush(tabPage.ForeColor)) 
{ 
e.Graphics.DrawString(tabPage.Text, tabPage.Font, brush, 
e.Bounds.X + 3, e.Bounds.Y + 3); 
} 
} 
} 

選択されてからタブを防止するイベントハンドラそれが無効の場合:

/// <summary> 
/// Cancel the selecting event if the TabPage is disabled. 
/// </summary> 
/// <param name="sender"></param> 
/// <param name="e"></param> 
private void PageTab_Selecting(object sender, TabControlCancelEventArgs e) 
{ 
if (e.TabPage.Enabled == false) 
{ 
e.Cancel = true; 
} 
} 

上記の変数と決定文:

int cont = Login.accountType; //the variable from the first tab, that decides whether the account is admin type or client type 
     //the variable is public static int in the first form 

     if (cont == 1) 
     { 
      //display all the tabs, because we logged in as admin 
     } 
     else if(cont == 0) 
     { 
      //disable the tabs that we do not want the client to access 
     } 
+0

WinForms TabControlは、無効になっているタブが何であるかを知りません。ユーザーが見ていないと思われるタブを削除するだけです。 – LarsTech

+0

はい、それはTabControlをロードするたびにそれらを追加することを意味し、管理者はすべてのprivillegesを持っています。 –

+0

投稿したコードの問題点は何ですか?他のフォームから取得している変数はどこですか? – LarsTech

答えて

0

私はそれを使用する方法を学んだが、それはintellisenseで表示されません、それは私を最初に混乱させるものですが、動作します。

int cont = Login.accountType; //the variable from the first tab, that decides whether the account is admin type or client type 
    //the variable is public static int in the first form 

    if (cont == 1) 
    { 
     tabControl1.TabPages[0].Enabled = true; 
     tabControl1.TabPages[1].Enabled = true; 
     tabControl1.TabPages[2].Enabled = true; 
     tabControl1.TabPages[3].Enabled = true; 
    } 
    else if(cont == 0) 
    { 
     tabControl1.TabPages[1].Enabled = false; 
    } 

これは、管理者のためのすべてのタブが有効になり、それがクライアントのために、MS-Accessデータベースに新しいアカウントを挿入する管理者用のテキストボックスが含まれている一つのタブが無効になります。

関連する問題