私はこのためのイベントハンドラーではなく、単純なIf Statement
CheckBox
がチェックされたかどうかをチェックします。これまでのところ:
if (chkRevLoop.IsChecked == true){}
しかし、それはエラーを発生させます:
型「bool」を暗黙的に変換できませんか? 「ブール」に。明示的な変換が存在します(キャストを見逃していますか?)
私が見逃しているこれを行う方法はありますか?
null合体演算子 を使用できます。この演算子は、左側のオペランドがヌルの場合、右側のオペランドを返します。したがって、false
が indeterminate 状態にあるときにCheckBox
を返すことができます( IsChecked
プロパティの値はnullに設定されます):
if (chkRevLoop.IsChecked ?? false)
{
}
これを機能させるには、bool?
からbool
への変換を行う必要があります。
if((bool)(chkRevLoop.IsChecked)){}
既にbool
条件であるため、trueを設定する必要はありません。trueの場合は、条件内にない場合にのみこの内部に入るからです。したがって、chkRevLoop.IsChecked == true
をここに配置する必要はありません。デフォルトでは、puttin IsChecked
によって==true
を要求しています。
プロパティに値があるかどうかを確認することを検討してください。
var isChecked = chkRevLoop.IsChecked.HasValue ? chkRevLoop.IsChecked : false;
if (isChecked == true){}
bool?
はtrue、false、またはnullにできますが、bool
はtrueまたはfalseにしかできません。 ?
は、型を「null可能」にし、通常はそうではない可能性としてnullを追加します。
if ((bool)chkRevLoop.IsChecked == true){}
または
if (chkRevLoop.IsChecked == (bool?)true){}
それが一致して動作するようにします。 IsCheckedがnullの場合、キャストで何が起こるかわからないため、2番目の方法の方がおそらく優れています。
CheckBoxのIsChecked
プロパティはNullableブール値です。
public bool? IsChecked { get; set; }
Nullableブール値を作成し、それが機能することを確認します。
bool? NullableBool = chkRevLoop.IsChecked;
if(NullableBool == true)
{
}
ラジオボタンがチェックされているかどうかを確認するには、1行で十分です。
string status = Convert.ToBoolean(RadioButton.IsChecked) ? "Checked" : "Not Checked";
Nullableオブジェクトを使用する必要があります。 IsCheckedプロパティは、Null、true、falseの3つの異なる値に割り当てることができるため
Nullable<bool> isChecked = new Nullable<bool>();
isChecked = chkRevLoop.IsChecked;
if (isChecked.HasValue && isChecked.Value)
{
}