Copyright © GrapeCity inc. All rights reserved.
True DBGrid for WinForms
オーナー描画セル
データ表示テクニック > オーナー描画セル

複雑なセルごとのカスタマイズの実行が必要な場合、OwnerDrawCell イベントのハンドラを記述して、セルのコンテンツをレンダリングできます。このイベントはOwnerDraw プロパティが True に設定されたセルのコンテンツを表示するために必要に応じて発生します。

上記のようにオーナー描画セルを作成するには、以下を実行します。

  1. デザイナまたはコードで、First 列の OwnerDraw プロパティを True に設定します。

    デザイナの場合

    • C1TrueDBGrid タスクメニューからデザイナを選択し、C1TrueDBGrid デザイナを開きます。
    • グリッドの右ペインにある First 列をクリックして選択します。

      ?この列はツールバーのドロップダウンリストから First をクリックしても選択できます。
    • 左ペインで、表示列タブをクリックします。
    • OwnerDraw プロパティを True に設定します。
    • OKをクリックして、エディタを閉じます。

    コードの場合

    次のコードを Form_Load イベントに追加します。

    Visual Basic コードの書き方

    Visual Basic
    コードのコピー
    Me.C1TrueDBGrid1.Splits(0).DisplayColumns("First").OwnerDraw = True
    

    C# コードの書き方

    C#
    コードのコピー
    this.c1TrueDBGrid1.Splits[0].DisplayColumns["First"].OwnerDraw = true;
    
  2. フォームの全般的な宣言内で RECT 構造体を宣言します。

    Visual Basic コードの書き方

    Visual Basic
    コードのコピー
    Public Structure RECT
        Dim Left As Long
        Dim Top As Long
        Dim Right As Long
        Dim Bottom As Long
    End Structure
    

    C# コードの書き方

    C#
    コードのコピー
    public struct RECT{
         long Left;
         long Top;
         long Right;
         long Bottom;
    }
    
  3. 次のように、OwnerDrawCell イベントを実装します。

    Visual Basic コードの書き方

    Visual Basic
    コードのコピー
    Private Sub C1TrueDBGrid1_OwnerDrawCell(ByVal sender As Object, ByVal e As C1.Win.C1TrueDBGrid.OwnerDrawCellEventArgs) Handles C1TrueDBGrid1.OwnerDrawCell
        If e.Col = 0 Then
     
            ' 青色から赤色へのグラデーションブラシを作成します。
            Dim pt1, pt2 As Point
            pt1 = New Point(e.CellRect.X, e.CellRect.Y)
            pt2 = New Point(e.CellRect.Right, e.CellRect.Y)
            Dim linGrBrush As System.Drawing.Drawing2D.LinearGradientBrush
            linGrBrush = New System.Drawing.Drawing2D.LinearGradientBrush(pt1, pt2, Color.Blue, Color.Red)
     
            Dim rt As RectangleF
            rt = New RectangleF(e.CellRect.X, e.CellRect.Y, e.CellRect.Width, e.CellRect.Height)
     
            ' セル矩形をグラデーションで塗りつぶします。
            e.Graphics.FillRectangle(linGrBrush, e.CellRect)
     
            Dim whiteBR As Brush
            whiteBR = New SolidBrush(Color.White)
            Dim dispCol As C1.Win.C1TrueDBGrid.C1DisplayColumn
            dispCol = Me.C1TrueDBGrid1.Splits(0).DisplayColumns(e.Col)
     
            ' テキストを水平に中央揃えにします。
            Dim sfmt As New StringFormat()
            sfmt.Alignment = StringAlignment.Center
     
            ' テキストを描画します。
            e.Graphics.DrawString(dispCol.DataColumn.CellText(e.Row), dispCol.Style.Font, whiteBR, rt, sfmt)
            whiteBR.Dispose()
     
            ' グリッドにイベントが処理されたことを知らせます。
            e.Handled = True
        End If
    End Sub
    

    C# コードの書き方

    C#
    コードのコピー
    private void C1TrueDBGrid1_OwnerDrawCell(object sender,  C1.Win.C1TrueDBGrid.OwnerDrawCellEventArgs e) 
    {
        if ( e.Col = 0 ) 
        {
            // 青色から赤色へのグラデーションブラシを作成します。
            Point pt1, pt2;
            pt1 = new Point[e.CellRect.X, e.CellRect.Y];
            pt2 = new Point[e.CellRect.Right, e.CellRect.Y];
            System.Drawing.Drawing2D.LinearGradientBrush linGrBrush;
            linGrBrush = new System.Drawing.Drawing2D.LinearGradientBrush(pt1, pt2, Color.Blue, Color.Red);
     
            RectangleF rt;
            rt = new RectangleF(e.CellRect.X, e.CellRect.Y, e.CellRect.Width, e.CellRect.Height);
     
            // セル矩形をグラデーションで塗りつぶします。
            e.Graphics.FillRectangle(linGrBrush, e.CellRect);
     
            Brush whiteBR;
            whiteBR = new SolidBrush(Color.White);
            C1.Win.C1TrueDBGrid.C1DisplayColumn dispCol;
            dispCol = this.c1TrueDBGrid1.Splits[0].DisplayColumns[e.Col];
     
            // テキストを水平に中央揃えにします。
            StringFormat  sfmt = new StringFormat();
            sfmt.Alignment = StringAlignment.Center;
     
            // テキストを描画します。
            e.Graphics.DrawString(dispCol.DataColumn.CellText[e.Row], dispCol.Style.Font, whiteBR, rt, sfmt);
            whiteBR.Dispose();
     
            // グリッドにイベントが処理されたことを知らせます。
            e.Handled = true;
        }
     
    }
    

この例には注意すべきいくつかの要点があります。

関連トピック