複雑なセルごとのカスタマイズの実行が必要な場合、OwnerDrawCell イベントのハンドラを記述して、セルのコンテンツをレンダリングできます。このイベントはOwnerDraw プロパティが True に設定されたセルのコンテンツを表示するために必要に応じて発生します。
上記のようにオーナー描画セルを作成するには、以下を実行します。
デザイナの場合
コードの場合
次のコードを Form_Load イベントに追加します。
Visual Basic コードの書き方
Visual Basic |
コードのコピー
|
---|---|
Me.C1TrueDBGrid1.Splits(0).DisplayColumns("First").OwnerDraw = True |
C# コードの書き方
C# |
コードのコピー
|
---|---|
this.c1TrueDBGrid1.Splits[0].DisplayColumns["First"].OwnerDraw = true; |
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; } |
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; } } |
この例には注意すべきいくつかの要点があります。