GrapeCity.Win.MultiRow.v80 アセンブリ > GrapeCity.Win.MultiRow 名前空間 > GcMultiRow クラス : CellPainting イベント |
Public Event CellPainting As EventHandler(Of CellPaintingEventArgs)
public event EventHandler<CellPaintingEventArgs> CellPainting
イベント ハンドラが、このイベントに関連するデータを含む、CellPaintingEventArgs 型の引数を受け取りました。次の CellPaintingEventArgs プロパティには、このイベントの固有の情報が記載されます。
プロパティ | 解説 |
---|---|
CellBounds | このセルの境界を取得します。 |
CellIndex | 親Section内でのセルのインデックスを取得します。 |
CellName | セルの名前を取得します。 |
CellStyle | 描画されるCellの表示スタイルを取得します。 |
ClipBounds | 現在の描画Cellのクリッピング境界を取得します。 |
Enabled | このセルが有効かどうかを示す値を取得します。 |
ErrorIcon | このセルのエラーアイコンを取得します。 |
ErrorIconAlignment | セルに関連付けられたエラーアイコンの配置を取得します。 |
ErrorText | セルで発生したエラーを示すエラーテキストを取得します。 |
FormattedValue | 現在のセルの書式設定された値を取得します。 |
Graphics | セルの描画に使用されたグラフィックを取得します。 |
Handled | System.ComponentModel.HandledEventArgsから継承されます。 |
IsPrinting | このセルが印刷中かどうかを示す値を取得します。 |
RowIndex | イベントが発生したオーナーRowのインデックスを取得します。 |
Scope | イベントが発生したセルの領域を取得します。 |
SectionIndex | イベントが発生したオーナーSectionのインデックスを取得します。 |
Selected | 指定されたCellが選択されているかどうかを示す値を取得します。 |
Value | セルの値を取得します。 |
ZoomFactor | 現在のGcMultiRowコントロールのズーム倍率を取得します。 |
ユーザーはこのイベントを処理して、コントロール内のセルの外観をカスタマイズできます。セル全体を独自に描画できるほか、セルの特定の部分を描画し、残りの部分の描画にCellPaintingEventArgs.PaintBackground、CellPaintingEventArgs.PaintForeground、CellPaintingEventArgs.PaintErrorIcon、CellPaintingEventArgs.PaintBorderの各メソッドを使用することもできます。
このイベントを処理するときは、セルに直接アクセスするのではなく、イベントハンドラのパラメーターを通じてセルにアクセスしてください。
描画結果はPrintStyle.Richスタイルの印刷で出力できますが、PrintStyle.Compactスタイルの印刷では出力できません。
using System; using System.Windows.Forms; using System.Drawing; using System.Drawing.Drawing2D; namespace GrapeCity.Win.MultiRow.SampleCode { class OwnerDrawDemo : Form { GcMultiRow gcMultiRow = new GcMultiRow(); public OwnerDrawDemo() { this.Text = "Owner Draw Demo"; gcMultiRow.Dock = DockStyle.Fill; LabelCell labelCell = new LabelCell(); NumericUpDownCell editNumber = new NumericUpDownCell(); editNumber.Size = new Size(150, 21); editNumber.Maximum = 100; editNumber.Minimum = 0; gcMultiRow.Template = Template.CreateGridTemplate(new Cell[] { labelCell, editNumber }); gcMultiRow.Rows.Add("Value:", 30m); gcMultiRow.Rows.Add("Value:", 60m); gcMultiRow.Rows.Add("Value:", 45m); gcMultiRow.Rows.Add("Value:", 90m); gcMultiRow.CellPainting += new EventHandler<CellPaintingEventArgs>(gcMultiRow_CellPainting); gcMultiRow.SectionPainting += new EventHandler<SectionPaintingEventArgs>(gcMultiRow_SectionPainting); this.Controls.Add(gcMultiRow); } 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); } } void gcMultiRow_SectionPainting(object sender, SectionPaintingEventArgs e) { if (e.RowIndex == this.gcMultiRow.NewRowIndex && e.Scope == CellScope.Row) { e.Paint(e.ClipBounds); StringFormat sf = new StringFormat(); sf.Alignment = StringAlignment.Center; // Paint string in section face. e.Graphics.DrawString("Edit cell in this row to add new rows", gcMultiRow.Font, Brushes.Gray, e.SectionBounds, sf); // If you customize the paint logic, make sure, the Handled property should be set to true. e.Handled = true; } } [STAThreadAttribute()] public static void Main() { Application.EnableVisualStyles(); Application.Run(new OwnerDrawDemo()); } } }
Imports System Imports System.Windows.Forms Imports System.Drawing Imports System.Drawing.Drawing2D Imports GrapeCity.Win.MultiRow Class OwnerDrawDemo Inherits Form Friend WithEvents gcMultiRow As New GcMultiRow() Public Sub New() Me.Text = "Owner Draw Demo" gcMultiRow.Dock = DockStyle.Fill Dim labelCell As New LabelCell() Dim editNumber As New NumericUpDownCell() editNumber.Size = New Size(150, 21) editNumber.Maximum = 100D editNumber.Minimum = 0 gcMultiRow.Template = Template.CreateGridTemplate(New Cell() {labelCell, editNumber}) gcMultiRow.Rows.Add("Value:", 30D) gcMultiRow.Rows.Add("Value:", 60D) gcMultiRow.Rows.Add("Value:", 45D) gcMultiRow.Rows.Add("Value:", 90D) Me.Controls.Add(gcMultiRow) End Sub 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 Private Sub gcMultiRow_SectionPainting(ByVal sender As Object, ByVal e As SectionPaintingEventArgs) Handles gcMultiRow.SectionPainting If e.RowIndex = Me.gcMultiRow.NewRowIndex AndAlso e.Scope = CellScope.Row Then e.Paint(e.ClipBounds) Dim sf As New StringFormat() sf.Alignment = StringAlignment.Center ' Paint string in section face. e.Graphics.DrawString("Edit cell in this row to add new rows", gcMultiRow.Font, Brushes.Gray, e.SectionBounds, sf) ' If you customize the paint logic, make sure, the Handled property should be set to true. e.Handled = True End If End Sub <STAThreadAttribute()> _ Public Shared Sub Main() Application.EnableVisualStyles() Application.Run(New OwnerDrawDemo()) End Sub End Class