如何将int或bool转换为checkState

时间:2010-07-10 22:53:05

标签: c# .net winforms

我需要将int和/或bool转换为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());
}

6 个答案:

答案 0 :(得分:12)

根据评论更新:

将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;

答案 1 :(得分:3)

你真的需要CheckedState,它也涵盖了一些CheckBoxes可以拥有的'部分'检查状态,或者你只是在寻找一种方法而不需要编写一堆IF语句来向CheckBoxes应用值和从CheckBoxes应用值?如果是这样,您是否考虑过使用ConvertTo?

将0或1转换为可分配给CheckBox的布尔值:

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

或者将Checkbox的Checked属性可靠地转换为1或0:

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

答案 2 :(得分:2)

我相信Convert.ToBoolean(urObject);这就是你追求的目标。

if(Convert.ToBoolean(urObject)) {} 

// C#C ++代码的C#等价代码:

if(urObject) {} //Which will return false if urObject is null or 0 (for integer), else return true

API信息:http://msdn.microsoft.com/en-us/library/system.convert.toboolean.aspx

答案 3 :(得分:2)

你也可以尝试这个

int ValueCheck=Convert.ToByte(chk.Checked)

答案 4 :(得分:1)

看来ValueCheck应该是1或0,分别代表truefalse,在这种情况下你应该使用它:

this.gs_check2.Checked = ValueCheck == 1;

编辑:根据你的编辑,你想要的是这个:

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

但请注意,ValueCheck可能包含CheckState枚举的无效值。

答案 5 :(得分:0)

CheckState枚举具有以下值:

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

如果在数据库中将值存储为可空位,这对应于bool?在c#。

我为bool之间的方便转换编写了以下静态助手方法?和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;
        }