2010-07-10 40 views
8

我需要轉換轉換int和布爾或以checkState如何int或布爾以checkState

int ValueCheck;  
private void gsCheck1_CheckedChanged(object sender, EventArgs e) 
{ 
    CheckBox box = sender as CheckBox; 
    box.CheckState = ValueCheck; // doesn't work 
    this.gsCheck2.CheckState = ValueCheck; // should be 1 or 0 ? 
} 

正如你可以看到我想要量變到質變(this.gsCheck1)CheckState改變(this.gsCheck2)CheckState並最終得到一個需要的整數值。

更新.... 問題解決

private int ValueCheck(CheckState Check) 
{ 
    if (Check == CheckState.Checked) 
     return 1; 
    else 
     return 0; 
} 


private void gs_CheckedChanged(object sender, EventArgs e) 
{ 
    CheckBox box = sender as CheckBox; 
    MessageBox.Show(box.Name + "="+ ValueCheck(box.CheckState).ToString()); 
} 

回答

12
  • 考慮CheckBox.Checked這是布爾屬性。使用box.CheckState = (CheckState)ValueCheck;
  • 您也可以使用?: operator。根據意見

更新:

要麼宣佈ValueCheck作爲CheckState:

CheckState ValueCheck; 
private void.... 

或者int值轉換爲CheckState值:

this.gsCheck2.CheckState = (CheckState)ValueCheck; 

的投退CheckState值爲int:

CheckState cs = box.CheckState; 
int ValueCheck = (int)cs; 
string result = "Current state: " + ValueCheck + cs.ToString(); 

//You question: 
MessageBox.Show(box.Name + (int)box.CheckState); 

更新
僅供參考,而不是寫ValueCheck方法,有一個C#操作?: operator我上面提到的,你可以這樣做:

int result = box.CheckState == CheckState.Checked ? 1 : 0; 

這是一個翻譯:

int result; 
if (box.CheckState == CheckState.Checked) 
    result = 1; 
else 
    result = 0; 
+0

我不能使用CheckBox.Checke – 2010-07-11 11:15:12

+0

你爲什麼不能,請解釋一下,我們會盡力去尋找一個更好的選擇。 – Shimmy 2010-07-11 11:18:19

+0

我編輯了我的問題,請看看。 – 2010-07-11 11:31:59

1

它看起來ValueCheck應該是1或0分別代表truefalse,在這種情況下您sh烏爾德使用:

this.gs_check2.Checked = ValueCheck == 1; 

編輯:根據您的編輯似乎你想要的東西是這樣的:

CheckState state = (CheckState)this.ValueCheck; 
box.CheckState = state; 
this.gsCheck2.CheckState = state; 

但是請注意,這可能是可能的,ValueCheck可能包含了CheckState枚舉值無效。

+0

this.gs_check2.Checked = ValueCheck;不工作 – 2010-07-11 11:09:53

+0

他說==,不=。 – Shimmy 2010-07-11 11:18:53

+0

ValueCheck已經是正值或負值,爲什麼== 1; – 2010-07-11 11:20:34

3

您是否真的需要CheckedState,它也涵蓋了CheckBoxes可以具有的「部分」檢查狀態,或者您是否僅僅是在尋找一種方法而無需編寫大量IF語句來將值應用於CheckBoxes?如果是這樣,你有沒有考慮使用ConvertTo?

要打開一個0或1爲可以被分配給一個CheckBox一個布爾值:

CheckBox1.Checked = Convert.ToBoolean(0);  // False - Not checked. 
CheckBox1.Checked = Convert.ToBoolean(1); // True - checked. 

或者可靠地把一個複選框的Checked屬性爲1或0:

int result = Convert.ToInt32(CheckBox1.Checked); 
2

你也可以試試這個

int ValueCheck=Convert.ToByte(chk.Checked) 
0

CheckState枚舉有以下值:

CheckState.Unchecked = 0, 
CheckState.Checked = 1, 
CheckState.Indeterminite = 2 

如果您將值存儲爲數據庫中的可空位,這對應於bool?在C#中。

我寫了下面的靜態幫助方法之間的方便轉換布爾之間?和CheckState

public static bool? ConvertCheckStateToNullableBool(CheckState input) 
     { 
      switch (input) 
      { 
       case CheckState.Unchecked: 
        return false; 
       case CheckState.Checked: 
        return true; 
       //case CheckState.Indeterminate: 
       // return null; 
      } 
      return null; 
     } 

     public static CheckState ConvertBoolToCheckState(bool? input) 
     { 
      switch (input) 
      { 
       case false: 
        return CheckState.Unchecked; 
       case true: 
        return CheckState.Checked; 
        //case null: 
        // return CheckState.Indeterminate; 
      } 
      return CheckState.Indeterminate; 
     }