FlexGrid for WinForms
チェックボックス
> エディタ > チェックボックス

ブール値へのチェックボックスの表示

FlexGrid では、ブール値を表すためにチェックボックスエディタがデフォルトで使用されます。つまり、Row オブジェクトまたは Column オブジェクトの DataType プロパティがブール型に設定されていると、セルにチェックボックスが表示されます。ユーザーは、このチェックボックスをクリックするだけで編集可能セルの値を切り替えることができます。 

このデフォルトの動作を無効にして、ブール型のチェックボックスの代わりにテキスト値を表示するには、Row オブジェクトまたは Column オブジェクトの Format プロパティを文字列値に設定します。

デフォルトのチェックボックス テキストとチェックボックス 非ブール値のチェックボックス 3 つの状態を表すチェックボックス
デフォルトのチェックボックス テキストとチェックボックス 非ブール値のチェックボックス 3 つの状態を表すチェックボックス

WinForms FlexGrid の列にチェックボックスタイプエディタを設定し、それをさらに設定するには、次のコードを使用します。

// データ型をブール値に設定します(チェックボックスを自動的に表示します
c1FlexGrid1.Cols["Verified"].DataType = typeof(Boolean);

// チェックボックスを表示する代わりに文字列値を表示します
c1FlexGrid1.Cols["Verified"].Format = "Yes;No";

// ブール列のチェックボックスの横にあるテキストを有効にします
c1FlexGrid1.Cols["Verified"].ImageAndText = true;
' データ型をブール値に設定します(チェックボックスを自動的に表示します)
c1FlexGrid1.Cols("Verified").DataType = GetType(Boolean)

' チェックボックスを表示する代わりに文字列値を表示します
c1FlexGrid1.Cols("Verified").Format = "Yes;No"

' ブール列のチェックボックスの横にあるテキストを有効にします
c1FlexGrid1.Cols("Verified").ImageAndText = True    

非ブール値へのチェックボックスの表示

非連結モードでは、チェックボックスと共に、非ブール型のテキストも表示できます。 任意の種類のセルにチェックボックスを追加するには、SetCellCheck メソッドを使用します。このメソッドは、行と列のインデックスのほかに、レンダリング時にチェックボックスの状態を指定する CheckEnum 列挙の値をパラメータの 1 つとして受け取ります。

次のコードは、非ブール値にチェックボックスを表示する方法を示しています。

 // チェックオン状態のセル(3,2)に2つの状態のチェックボックスを設定します
 c1flexGrid1.SetCellCheck(3, 2, CheckEnum.Checked);                                
' チェックオン状態のセル(3,2)に2つの状態のチェックボックスを設定します
c1flexGrid1.SetCellCheck(3, 2, CheckEnum.Checked)

チェックボックスの配置の設定

セル内のチェックボックスの位置を設定するには、Row オブジェクトまたは Column オブジェクトの ImageAlign プロパティを使用する必要があります。このプロパティは、ImageAlignEnum 列挙に含まれる値を受け取ります。これを使用して、画像を非表示にする、タイル表示する、引き伸ばす、画像の位置を設定するなどの操作が可能です。

チェックボックスを WinForms FlexGrid の列の中央に配置して表示するには、次のコードを使用します。

// チェックボックスをセルの右中央に揃えます
c1flexGrid1.Cols["Verified"].ImageAlign = ImageAlignEnum.RightCenter;                
' チェックボックスをセルの右中央に揃えます
c1flexGrid1.Cols("Verified").ImageAlign = ImageAlignEnum.RightCenter      

チェックボックス画像の変更

さまざまな状態のチェックボックスのアイコン画像を変更するには、Glyphs プロパティからアクセスできる GlyphEnum を使用します。グリフ変更の詳細については、カスタムグリフ を参照してください。

WinForms FlexGrid のさまざまなチェックボックスの状態に使用する画像を変更するには、次のコードを使用します。

    // カスタム画像をチェックボックスアイコンとして設定します
    Image imgChk = new Bitmap("../../Resources/Images/checked.png");
    Image imgUnchk = new Bitmap("../../Resources/Images/unchecked.png");
    Image imgGray = new Bitmap("../../Resources/Images/null.png");
    c1flexGrid1.Glyphs[GlyphEnum.Checked] = imgChk;
    c1flexGrid1.Glyphs[GlyphEnum.Unchecked] = imgUnchk;
    c1flexGrid1.Glyphs[GlyphEnum.Grayed] = imgGray;                      
    ' カスタム画像をチェックボックスアイコンとして設定します
    Dim imgChk As Image = New Bitmap("../../Resources/Images/checked.png")
    Dim imgUnchk As Image = New Bitmap("../../Resources/Images/unchecked.png")
    Dim imgGray As Image = New Bitmap("../../Resources/Images/null.png")
    c1flexGrid1.Glyphs(GlyphEnum.Checked) = imgChk
    c1flexGrid1.Glyphs(GlyphEnum.Unchecked) = imgUnchk
    c1flexGrid1.Glyphs(GlyphEnum.Grayed) = imgGray        

3 つの状態を表すチェックボックスの使用

2 つの状態を表す通常のチェックボックスに加えて、FlexGrid では 3 つの状態を表すチェックボックスも作成できます。3 つの状態を有効にする最も簡単な方法は、CheckEnum を使用することです。 ブール値チェックボックスでは、 CheckEnum.Checked と CheckEnum.Unchecked の状態が切り替えられるのに対して、3 つの状態を表すチェックボックスの状態は CheckEnum.TSCheckedCheckEnum.TSUnchecked、および CheckEnum.TSGrayed で表されます。 ただし、この場合は、一度チェックボックスの状態をオン/オフに切り替えると、デフォルトでは null に戻すことができません。チェックボックスの 3 つの状態を繰り返し切り替えるには、 ValidateEdit イベントを処理する必要があります。

WinForms FlexGrid で 3 つの状態を表すチェックボックスを作成するには、次のコードを使用します。

     private void c1FlexGrid1_ValidateEdit(object sender, ValidateEditEventArgs e)
          {
        if (c1FlexGrid1.Cols[e.Col].Name == "Done")
         {
           e.Cancel = true;
           if (c1FlexGrid1[e.Row, e.Col].Equals(false))
             {
               c1FlexGrid1[e.Row, e.Col] = true;
             }
           else if (c1FlexGrid1[e.Row, e.Col].Equals(true))
             {
                c1FlexGrid1[e.Row, e.Col] = DBNull.Value;
             }
           else if (c1FlexGrid1[e.Row, e.Col].Equals(DBNull.Value))
             {
                c1FlexGrid1[e.Row, e.Col] = false;
             }
         }
      }            
Private Sub c1FlexGrid1_ValidateEdit(ByVal sender As Object, ByVal e As ValidateEditEventArgs)
    If c1FlexGrid1.Cols(e.Col).Name Is "Done" Then
        e.Cancel = True

        If c1FlexGrid1(e.Row, e.Col).Equals(False) Then
            c1FlexGrid1(e.Row, e.Col) = True
        ElseIf c1FlexGrid1(e.Row, e.Col).Equals(True) Then
            c1FlexGrid1(e.Row, e.Col) = DBNull.Value
        ElseIf c1FlexGrid1(e.Row, e.Col).Equals(DBNull.Value) Then
            c1FlexGrid1(e.Row, e.Col) = False
        End If
    End If
End Sub