GrapeCity.Win.MultiRow.v80 アセンブリ > GrapeCity.Win.MultiRow 名前空間 : CellPaintingEventArgs クラス |
Public Class CellPaintingEventArgs Inherits System.ComponentModel.HandledEventArgs
public class CellPaintingEventArgs : System.ComponentModel.HandledEventArgs
GcMultiRow.CellPaintingイベントは、GcMultiRow上の表示可能なCellごとに発生します。パフォーマンスを向上させるため、セルの外観を変更するときは、GcMultiRow内のセルに直接アクセスするのではなく、CellStyleのプロパティを設定してください。セルを手動で描画する場合は、System.ComponentModel.HandledEventArgs.Handledプロパティをtrueに設定します。System.ComponentModel.HandledEventArgs.Handledをtrueに設定しなければ、カスタマイズした結果の上にセルが描画されます。
GcMultiRowの描画ロジックでは、セルの描画は5つのレベル(セルの背景、前景、境界線、エラーアイコン、波線)に分かれます。どの部分がセルの前景または背景であるかは、セル型によって定義が異なります。詳細については、個々のセル型を参照してください。
セルの各描画部分に対応する5つのメソッド(PaintForeground、PaintBackground、PaintBorder、PaintErrorIcon、PaintWaveLine)があります。そのため、セルのすべての部分を手動で描画する場合は、これらのメソッドを呼び出して独自の描画を行うことができます。セルの既定の描画順序は、背景、前景、エラーアイコン、波線、境界線の順です。
void gcMultiRow_CellPainting(object sender, CellPaintingEventArgs e) { if (e.CellIndex == 1 && e.Scope == CellScope.Row) { e.PaintBackground(e.ClipBounds); PaintRateBlock(e); e.PaintForeground(e.ClipBounds); e.PaintBorder(e.ClipBounds); // If you customize the paint logic, make sure, the Handled property should be set to true. e.Handled = true; } } private static void PaintRateBlock(CellPaintingEventArgs e) { Color color1 = Color.Red; Color color2 = Color.Orange; if (e.Selected) { color1 = Color.Blue; color2 = Color.SkyBlue; } decimal rate = 0m; if (e.Value != null) { rate = (decimal)(e.Value) / 100m; } // Calculate block size. int spinButtonWidth = 17; int blockWidth = (int)((e.ClipBounds.Width - spinButtonWidth) * rate); if (blockWidth > 0) { Rectangle rect = e.CellBounds; rect.Width = blockWidth; LinearGradientBrush brush = new LinearGradientBrush(rect, color1, color2, LinearGradientMode.Vertical); e.Graphics.FillRectangle(brush, rect); } }
Private Sub gcMultiRow_CellPainting(ByVal sender As Object, ByVal e As CellPaintingEventArgs) Handles gcMultiRow.CellPainting If e.CellIndex = 1 AndAlso e.Scope = CellScope.Row Then e.PaintBackground(e.ClipBounds) PaintRateBlock(e) e.PaintForeground(e.ClipBounds) e.PaintBorder(e.ClipBounds) ' If you customize the paint logic, make sure, the Handled property should be set to true. e.Handled = True End If End Sub Private Shared Sub PaintRateBlock(ByVal e As CellPaintingEventArgs) Dim color1 As Color = Color.Red Dim color2 As Color = Color.Orange If e.Selected Then color1 = Color.Blue color2 = Color.SkyBlue End If Dim rate As Decimal = 0D If e.Value <> Nothing Then rate = DirectCast((e.Value), Decimal) / 100D End If ' Calculate block size. Dim spinButtonWidth As Integer = 17 Dim blockWidth As Integer = CInt((e.ClipBounds.Width - spinButtonWidth) * rate) If blockWidth > 0 Then Dim rect As Rectangle = e.CellBounds rect.Width = blockWidth Dim brush As New LinearGradientBrush(rect, color1, color2, LinearGradientMode.Vertical) e.Graphics.FillRectangle(brush, rect) End If End Sub
System.Object
System.EventArgs
System.ComponentModel.HandledEventArgs
GrapeCity.Win.MultiRow.CellPaintingEventArgs