5

有効なチェックボックスとして情報を表示していますがThreeState、null 可能なブール値を可能な限り簡単な方法で使用したいと考えています。

現在、ネストされた三項式を使用しています。しかし、より明確な方法はありますか?

bool? foo = null;
checkBox1.CheckState = foo.HasValue ?
    (foo == true ? CheckState.Checked : CheckState.Unchecked) :
    CheckState.Indeterminate;

* チェックボックスとフォームは読み取り専用です。

4

3 に答える 3

6

それが私がそれをする方法です。

少しきれいにするために拡張メソッドを追加します。

    public static CheckState ToCheckboxState(this bool booleanValue)
    {
        return booleanValue.ToCheckboxState();
    }

    public static CheckState ToCheckboxState(this bool? booleanValue)
    {
        return booleanValue.HasValue ?
               (booleanValue == true ? CheckState.Checked : CheckState.Unchecked) :
               CheckState.Indeterminate;
    }
于 2012-04-27T20:17:46.377 に答える
3

より明確なのは、議論の余地のある声明です。たとえば、これはより明確であると言えます。

if(foo.HasValue)
{
    if(foo == true) 
       checkBox1.CheckState = CheckState.Checked;
    else
       checkBox1.CheckState = CheckState.Unchecked;
}
else
    checkBox1.CheckState  = CheckState.Indeterminate;

別のオプションは、このためだけにメソッドを作成することです。

checkBox1.CheckState = GetCheckState(foo);

public CheckState GetCheckState(bool? foo)
{
    if(foo.HasValue)
    {
        if(foo == true) 
           return CheckState.Checked;
        else
           return CheckState.Unchecked;
    }
    else
        return CheckState.Indeterminate

}

しかし、私はあなたのコードが好きです。

于 2012-04-27T20:20:25.200 に答える
0

@Nathanの拡張メソッドの提案に基づいて、私はこれを思いつきました:

public static void SetCheckedNull(this CheckBox c, bool? Value)
{
    if (!c.ThreeState)
        c.Checked = Value == true;
    else
        c.CheckState = Value.HasValue ?
            (Value == true ? CheckState.Checked : CheckState.Unchecked) :
            CheckState.Indeterminate;
}

私がそれについて気に入らない唯一のことは、「通常の」チェックボックスを設定するときです:

checkBox1.Checked = someBool;

ThreeState対応のチェックボックスを設定する場合とは異なります。

checkBox2.SetCheckedNull(someNullableBool);

後者は、OCDを少し微調整するのに十分な違いを感じます。:)

于 2012-04-27T20:30:48.557 に答える