PowerTools MultiRow for Windows Forms 8.0J
CellPaintingEventArgs クラス
メンバ  使用例 

GcMultiRowコントロールのGcMultiRow.CellPaintingイベントのデータを提供します。
構文
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.Handledtrueに設定しなければ、カスタマイズした結果の上にセルが描画されます。

GcMultiRowの描画ロジックでは、セルの描画は5つのレベル(セルの背景、前景、境界線、エラーアイコン、波線)に分かれます。どの部分がセルの前景または背景であるかは、セル型によって定義が異なります。詳細については、個々のセル型を参照してください。

セルの各描画部分に対応する5つのメソッド(PaintForegroundPaintBackgroundPaintBorderPaintErrorIconPaintWaveLine)があります。そのため、セルのすべての部分を手動で描画する場合は、これらのメソッドを呼び出して独自の描画を行うことができます。セルの既定の描画順序は、背景、前景、エラーアイコン、波線、境界線の順です。

使用例
次のサンプルコードは、セルの描画ロジックをカスタマイズする方法を示します。このサンプルコードは、GcMultiRow.CellPaintingイベントに示されている詳細なコード例の一部を抜粋したものです。
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

参照

CellPaintingEventArgs メンバ
GrapeCity.Win.MultiRow 名前空間
CellPainting イベント

 

 


© 2008-2015 GrapeCity inc. All rights reserved.