Boolean cast指定的强制转换无效错误

时间:2015-11-10 15:37:34

标签: c# checkbox casting

我目前正在存储checkbox.Checked值的复选框的true / false状态,以便在下次加载表单时重置。

当表单被加载时,我得到了值并设置了这样的复选框。

string value = (string)Registry.GetValue(@"HKEY_CURRENT_USER\Software\CompanyName\AddressLoad", "SpaceBetween1", null);
if (value != null)
{
    if (value == "True")
    {
        checkBox1.Checked = true;
    } Else {
        checkBox1.Checked = false;
    }
}

这有效,但我觉得可能有更好的方法。

我试过这个

checkBox1.Checked = (Boolean)Registry.GetValue(@"HKEY_CURRENT_USER\Software\CompanyName\AddressLoad", "SpaceBetween1", null);

但它给了我一个"Specified cast is not valid."错误。

该值在REG_SZ中存储在注册表中。不确定这是否导致他发出。

enter image description here

我已经搜索了如何解决此问题,但没有找到以这种方式完成的情况。

有没有更好的方法将字符串值强制转换为布尔值并将其分配给复选框?

4 个答案:

答案 0 :(得分:7)

使用Convert.ToBoolean,因为Registry.GetValue将返回object,如果它是bool类型,或者如果它包含字符串true/false,您将获得结果。

例如:

object obj = "true";
bool b = (bool) obj; //This will fail
bool b2 = Convert.ToBoolean(obj); //This will work. 

答案 1 :(得分:7)

由于您从注册表中读取的值的类型是checkBox1.Checked = Convert.ToBoolean( Registry.GetValue( @"HKEY_CURRENT_USER\Software\CompanyName\AddressLoad" , "SpaceBetween1" , null ) ); ,因此您无法强制转换它。但是,你可以convert

%c

答案 2 :(得分:3)

答案 3 :(得分:2)

REG_SZstring

考虑到这一点,你可以做到

checkBox1.Checked = Registry.GetValue(@"HKEY_CURRENT_USER\Software\CompanyName\AddressLoad",
    "SpaceBetween1", null).ToString() == "True";