2011-11-25 119 views
0

當前我們調用Web服務來檢查用戶是否有權使用聊天室,並且我們收到0或1.我想添加也能夠接收2,這將表明它現在被啓用和授權 ,所以我想使用三個狀態複選框,完全填充將表示他已被授權並且當前已啓用(登錄),檢查將表示他已被授權但現在未啓用,未選中將意味着他沒有這個聊天室的許可。使用三狀態複選框來確定字段的三種狀態

這是我目前使用的一些代碼。僅供參考我從我們的開發人員手中接管了這個項目,我對此很感興趣,如果你能給我一個例子,即使只是爲了authtac1,那麼我會弄清楚如何去做所有其他的事情,我也需要添加一個新場ActiveTac1像我有AuthTac1?謝謝你的幫助。

public partial class IMeditor : Form 
{ 
    private IMuser imu; 
    private IMui IMui; 
    private IMdata IMdata; 

    public IMeditor(IMui IMui, IMuser U, string Member) 
    { 
     InitializeComponent(); 
     this.IMui= IMui; 
     imu = U; 
     if (imu.UID == 0) 
     { 
      Add.Text = "Add"; 
      imu.MemberNick= Member; 
     } 
     else 
      Add.Text = "Update"; 
     IMdata = new IMdata(); 
     MemberHandle.Text = imu.MemberHandle; 
     IM.Text = imu.IM; 
     AuthChat.Checked = imu.AuthChat == 1; 
     AuthTac1.Checked = imu.AuthTac1 == 1; 
     AuthTac2.Checked = imu.AuthTac2 == 1; 
     AuthTac3.Checked = imu.AuthTac3 == 1; 
     AuthTac4.Checked = imu.AuthTac4 == 1; 



     switch (imu.Transport.ToLower()) { 
      case "aim": Transport.SelectedIndex = 0; break; 
      case "gtalk": Transport.SelectedIndex = 1; break; 
      case "msn": Transport.SelectedIndex = 2; break; 
      case "yahoo": Transport.SelectedIndex = 3; break; 

} 



    private void Add_Click(object sender, EventArgs e) 
    { 
     IMdata.AddIM(IMui.Username, IMui.Password, imu.UID, MemberHandle.Text, Transport.Text, IM.Text, 
      AuthChat.Checked ? 1 : 0, 0, 
      AuthTac1.Checked ? 1 : 0, AuthTac2.Checked ? 1 : 0, AuthTac3.Checked ? 1 : 0, 
      AuthTac4.Checked ? 1 : 0); 
     Close(); 
    } 

最後一個問題,以確保我沒有搞砸任何東西 @competemt_tech這就是我最終使用(感謝這麼這麼多的幫助,我們的開發者誰能夠幫助我)

要知道如何設置的複選框,當我從我使用

AuthChat.CheckState = GetCheckStateFromAuthCode(imu.AuthChat, imu.Enabled); 
AuthTac1.CheckState = GetCheckStateFromAuthCode(imu.AuthTac1, imu.Tac1Enabled); 
AuthTac2.CheckState = GetCheckStateFromAuthCode(imu.AuthTac2, imu.Tac2Enabled); 
AuthTac3.CheckState = GetCheckStateFromAuthCode(imu.AuthTac3, imu.Tac3Enabled); 

的WebService的數據,然後我用:

private CheckState GetCheckStateFromAuthCode(int AuthCode, int Enabled) 
    { 
     switch (AuthCode + Enabled) 
     { 
      case 0: 
       return CheckState.Unchecked; // Unauthorized 
      case 1: 
       return CheckState.Checked; // Authorized, not enabled 
      case 2: 
       return CheckState.Indeterminate; // Authorized and enabled 
      default: 
       return CheckState.Unchecked; 
     } 
    } 

後,我做出改變,發回給我使用的web服務:我用

imu.AuthChat, imu.Enabled = GetAuthCodeFromCheckState(AuthChat.CheckState), 
imu.AuthTac1, imu.Tac1Enabled = GetAuthCodeFromCheckState(AuthTac1.CheckState), 
imu.AuthTac2, imu.Tac2Enabled = GetAuthCodeFromCheckState(AuthTac2.CheckState), 
imu.AuthTac3, imu.Tac3Enabled = GetAuthCodeFromCheckState(AuthTac3.CheckState), 

然後:

private int GetAuthCodeFromCheckState(CheckState checkState) 
    { 
     switch (checkState) 
     { 
      case CheckState.Unchecked: // Unauthorized 
       return 0; 
      case CheckState.Indeterminate: // Authorized, not enabled 
       return 1; 
      case CheckState.Checked: // Authorized and enabled 
       return 2; 
      default: 
       return 0; 
     } 
    } 

回答

3

基於您的代碼,看來你正在使用WinForms,而不是WPF,正確嗎?

如果是這樣的話,那麼你將要使用的複選框的CheckState屬性,而不是檢查,因爲它支持三個值:

Unchecked = 0 
Checked = 1 
Indeterminate = 2 

更新

爲了地址您的要求,您將有類似於以下代碼:

首先,創建一個函數,將生成正確的校驗基地的授權碼:

private CheckState GetCheckStateFromAuthCode(int AuthCode) 
{ 
    switch (AuthCode) 
    { 
     case 0: 
      // Unauthorized 
      return CheckState.Unchecked; 

     case 1: 
      // Authorized, not enabled 
      return CheckState.Indeterminate; 

     case 2: 
      // Authorized and enabled 
      return CheckState.Checked; 

     default: 
      throw new ArgumentException("Unrecognized AuthCode value " + AuthCode.ToString()); 
    } 
} 

然後,使用此代碼來設置複選框的狀態:

AuthChat.CheckState = GetCheckStateFromAuthCode(imu.AuthChat); 
AuthTac1.CheckState = GetCheckStateFromAuthCode(imu.AuthTac1); 
etc. 

更新2

爲了從checkstate檢索AUTHCODE:

首先,創建一個函數,該函數將在授權碼上生成正確的校驗狀態:

private int GetAuthCodeFromCheckState(CheckState checkState) 
{ 
    switch (checkState) 
    { 
     case CheckState.Unchecked: 
      // Unauthorized 
      return 0; 

     case CheckState.Indeterminate: 
      // Authorized, not enabled 
      return 1; 

     case CheckState.Checked: 
      // Authorized and enabled 
      return 2; 

     default: 
      throw new ArgumentException("Unrecognized checkState value " + checkState.ToString()); 
    } 
} 

然後,使用這個代碼,以從複選框設置AUTH碼:

imu.AuthChat = GetAuthCodeFromCheckState(AuthChat.CheckState); 
imu.AuthTac1 = GetAuthCodeFromCheckState(AuthTac1.CheckState); 
etc. 
+0

所以ID使用AuthChat.CheckState = imu.AuthChat == 1; AuthTac1.CheckState = imu.AuthTac1 == 1; 等等? –

+0

@IzzyG:更新了答案,並提供了有關如何處理此問題的更多說明。 –

+0

美麗的作品,當我檢索數據,。如何處理我的代碼的最後一部分(添加,也就是當我更新/保存新信息)我發回到WS如果我想進行更改(所以我可以將用戶設置爲每個0 1或2狀態房間) –