FlexGrid for WinForms
セルの書式設定
セル > セルの書式設定

セルコンテンツ

セルのコンテンツを書式設定および表示する方法を制御するには、Row オブジェクトまたは Column オブジェクトの Format プロパティを設定して、.NET Framework の String.Format プロパティで使用される書式設定と同様に文字列を書式設定します。たとえば、以下のサンプルコードは、3 番目の列を Date、4 番目の列を Currency として書式設定します。

Cell format

//短い日付書式を設定します
c1FlexGrid1.Cols[3].Format = "D";
 
//通貨書式を設定します
c1FlexGrid1.Cols[4].Format = "c";                    
'短い日付書式を設定します
c1FlexGrid1.Cols(3).Format = "D"

'通貨書式を設定します
c1FlexGrid1.Cols(4).Format = "c"   

また、FlexGrid は、Format プロパティを設定するための設計時オプションとして[書式文字列]ダイアログを提供します。[書式文字列]ダイアログには、列タスクメニューの[書式文字列]フィールドにある省略符ボタンをクリックしてアクセスできます。または、C1FlexGrid 列エディタで Format プロパティを使用することもできます。 

[書式文字列]ダイアログ

[書式文字列]ダイアログは各列に固有です。選択した列の Format プロパティのみが変更されます。

セルの外観

FlexGrid は、配置、フォント、色、境界線などのセルの外観を処理するために CellStyle オブジェクトを提供しています。グリッドには、グリッドの書式設定に使用されるスタイルのコレクションを保持する Styles プロパティがあります。このコレクションには、固定セル、スクロール可能セル、選択範囲、フォーカスセルなど、グリッド要素の外観を定義する組み込みメンバがいくつか含まれます。これらのスタイルを変更して、グリッドの外観を修正できます。

セルの外観

組み込みスタイルを変更してグリッドの外観を変更する方法が最も簡単ですが、独自のカスタムスタイルを作成して、それをセル、行、列に割り当てることもできます。

WinForms FlexGrid のセルの外観を変更するには、次のコードを使用します。

//組み込みのスタイルをカスタマイズします
CellStyle cs = c1FlexGrid1.Styles.Focus;
cs.Font = new Font(c1FlexGrid1.Font, FontStyle.Bold);
cs.ForeColor = Color.Green;
cs.BackColor = Color.Red;

//カスタムスタイルを作成します
CellStyle cs1 = c1FlexGrid1.Styles.Add("NewStyle");
cs1.BackColor = Color.Aqua;
cs1.ForeColor = Color.Blue;

//カスタムスタイルを割り当てます
c1FlexGrid1.Cols[3].Style = cs1;                        
Dim cs As CellStyle = c1FlexGrid1.Styles.Focus
    cs.Font = New Font(c1FlexGrid1.Font, FontStyle.Bold)
    cs.ForeColor = Color.Green
    cs.BackColor = Color.Red

    Dim cs1 As CellStyle = c1FlexGrid1.Styles.Add("NewStyle")
    cs1.BackColor = Color.Aqua
    cs1.ForeColor = Color.Blue

    c1FlexGrid1.Cols(3).Style = cs1
                        

条件付き書式設定

コンテンツに従ってセルの書式設定を行うには、新しいスタイルを作成し、SetCellStyle() メソッドを使用して、特定の条件を満たすセルにスタイルを適用する必要があります。たとえば、指定した値より大きい値を強調表示するには、新しいスタイルを使用して、それらの値を含むセルを書式設定します。

条件付き書式設定

以下のコードは、WinForms FlexGrid のセルに条件付き書式設定を適用する方法を示しています。

CellStyle cs;
 
// 大きな値のカスタムスタイルを作成します
cs = c1FlexGrid1.Styles.Add("LargeValue");
cs.Font = new Font(Font, FontStyle.Italic);
cs.BackColor = Color.Gold;

for (int row = 1; row < c1FlexGrid1.Rows.Count; row++)
if (Convert.ToDouble(c1FlexGrid1[row, 4]) > 80000)
c1FlexGrid1.SetCellStyle(row, 4, cs);         
Dim cs As CellStyle

    cs = c1FlexGrid1.Styles.Add("LargeValue")
    cs.Font = New Font(Font, FontStyle.Italic)
    cs.BackColor = Color.Gold

    For row As Integer = 1 To c1FlexGrid1.Rows.Count - 1

        If Convert.ToDouble(c1FlexGrid1(row, 4)) > 80000 Then
            c1FlexGrid1.SetCellStyle(row, 4, cs)
        End If
    Next

オーナー描画セル

上のセクションでは、グリッドの外観を変更するために、CellStyle オブジェクトを使用して FlexGrid のセルをカスタマイズする方法について説明しています。ただし、グラデーション背景、グラフィックのレンダリングなど、グリッドセルをさらにカスタマイズするには、C1FlexGrid クラスの DrawMode プロパティと OwnerDrawCell イベントを使用できます。

DrawMode プロパティにより、OwnerDrawCell イベントが発生するかどうかが決まります。このイベントを使用して、セルのすべての視覚要素をオーバーライドできます。イベントハンドラで e.Text パラメータと e.Image パラメータを設定することで、セルに表示されるテキストと画像を変更できます。また、e.Style プロパティを設定することで、セルの表示に使用されるスタイルを変更できます。

他のセルに影響しないように、Style パラメータのプロパティは変更しないでください。その代わり、Style パラメータに新しい CellStyle オブジェクトを割り当てます。たとえば、e.Style.ForeColor = Color.Red を設定するのではなく、e.Style = c1FlexGrid1.Styles["RedStyle"] を使用して、パラメータに完全に新しいスタイルを割り当てます。

独自の描画コードを使用してセルに描画したり、カスタムコードと e.DrawCell メソッドの呼び出しを組み合わせることもできます。たとえば、GDI 呼び出しを使用してセルの背景を描画し、次に e.DrawCell を呼び出してセルの境界線とコンテンツを表示することができます。

以下の例で、WinForms FlexGrid は、選択されたセル範囲の背景をグラデーションブラシを使用して描画します。このサンプルコードでは、まず DrawMode プロパティに OwnerDraw を設定し、次に LinearGradientBrush オブジェクトを宣言します。

Owner drawn cell

System.Drawing.Drawing2D.LinearGradientBrush m_GradientBrush;
private void Form1_Load(object sender, EventArgs e)
{
    // オーナー描画セルで使用するブラシ
    m_GradientBrush = new System.Drawing.Drawing2D.LinearGradientBrush(ClientRectangle, Color.SteelBlue, Color.White, 45);

    // オーナー描画を使用してグラデーションを追加します
    c1FlexGrid1.DrawMode = C1.Win.C1FlexGrid.DrawModeEnum.OwnerDraw;
}

private void C1FlexGrid1_OwnerDrawCell(object sender, C1.Win.C1FlexGrid.OwnerDrawCellEventArgs e)
{
    // グラデーションブラシを使用して選択したセルの背景を描画します
    if (c1FlexGrid1.Selection.Contains(e.Row, e.Col))
    {
// 背景を描画します
e.Graphics.FillRectangle(m_GradientBrush, e.Bounds);

// グリッドにコンテンツを描画させます
e.DrawCell(C1.Win.C1FlexGrid.DrawCellFlags.Content);

// このセルの描画が完了しました
e.Handled = true;
    }
}
Private m_GradientBrush As Drawing.Drawing2D.LinearGradientBrush

Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs)
    ' オーナー描画セルで使用するブラシ
    m_GradientBrush = New Drawing.Drawing2D.LinearGradientBrush(ClientRectangle, Color.SteelBlue, Color.White, 45)

    ' オーナー描画を使用してグラデーションを追加します
    c1FlexGrid1.DrawMode = C1.Win.C1FlexGrid.DrawModeEnum.OwnerDraw
End Sub

Private Sub C1FlexGrid1_OwnerDrawCell(ByVal sender As Object, ByVal e As C1.Win.C1FlexGrid.OwnerDrawCellEventArgs)
    ' グラデーションブラシを使用して選択したセルの背景を描画します
    If c1FlexGrid1.Selection.Contains(e.Row, e.Col) Then
        ' 背景を描画します
        e.Graphics.FillRectangle(m_GradientBrush, e.Bounds)

        ' グリッドにコンテンツを描画させます
        e.DrawCell(C1.Win.C1FlexGrid.DrawCellFlags.Content)

        ' このセルの描画が完了しました
        e.Handled = True
    End If
End Sub
'削除