DateTimePickerCellを継承してユーザー定義型セルを作成する場合
次のコードはDateTimePickerCellを継承するユーザー定義セルMyDateTimePickerCellです。
デザイナでこのセルを使用するには、次のように操作します。
Imports System.Windows.Forms Imports GrapeCity.Win.MultiRow Public Class MyDateTimePickerCell Inherits DateTimePickerCell Protected Overrides Sub OnPaint(ByVal e As CellPaintingEventArgs) MyBase.OnPaint(e) If e.Value Is Nothing Then Dim placeHolder As String = "(なし)" e.PaintBackground(e.ClipBounds) Dim brushColor As Color = IIf(e.Selected, e.CellStyle.SelectionForeColor, e.CellStyle.ForeColor) If e.Enabled = False Then brushColor = e.CellStyle.DisabledForeColor Using brush As New SolidBrush(brushColor) Dim contentSize As SizeF = e.Graphics.MeasureString(placeHolder, e.CellStyle.Font) Dim y As Double = e.CellBounds.Y + ((e.CellBounds.Height - contentSize.Height) / 2) e.Graphics.DrawString(placeHolder, e.CellStyle.Font, brush, e.ClipBounds.X, y) End Using End If End Sub End Class
using System.Drawing; using GrapeCity.Win.MultiRow; public class MyDateTimePickerCell : DateTimePickerCell { protected override void OnPaint(CellPaintingEventArgs e) { base.OnPaint(e); if (e.Value != null) { string placeHolder = "(なし)"; Color brushColor = e.Selected ? e.CellStyle.SelectionForeColor : e.CellStyle.ForeColor; if (e.Enabled == false) brushColor = e.CellStyle.DisabledForeColor; using (Brush brush = new SolidBrush(brushColor)) { SizeF contentSize = e.Graphics.MeasureString(placeHolder, e.CellStyle.Font); float y = e.CellBounds.Y + ((e.CellBounds.Height - contentSize.ToSize().Height) / 2); e.Graphics.DrawString(placeHolder, e.CellStyle.Font, brush, e.CellBounds.X, y); } } } }
デザイナでこのセルを使用するには、次のように操作します。
- 上記のコードをMyDateTimePickerCell.vbまたはMyDateTimePickerCell.csとしてファイルに保存する。
- ファイルをプロジェクトに追加する。
- プロジェクトをビルドする。
- テンプレートデザイナを開く。
- ツールボックスから"MyDateTimePickerCell"を選択し、ドラッグしてデザイナに配置する。
DateTimePickerCellを継承してユーザー定義型セルを作成する場合
Imports GrapeCity.Win.MultiRow Private Sub GcMultiRow1_CellPainting(ByVal sender As System.Object, ByVal e As CellPaintingEventArgs) Handles GcMultiRow1.CellPainting Dim gcMultiRow As GcMultiRow = TryCast(sender, GcMultiRow) If TypeOf gcMultiRow.Rows(e.RowIndex).Cells(e.CellIndex) Is DateTimePickerCell Then If e.Value Is Nothing Then Dim placeHolder As String = "(なし)" e.PaintBackground(e.ClipBounds) Dim brushColor As Color = IIf(e.Selected, e.CellStyle.SelectionForeColor, e.CellStyle.ForeColor) Using brush As New SolidBrush(brushColor) Dim contentSize As SizeF = e.Graphics.MeasureString(placeHolder, e.CellStyle.Font) Dim y As Double = e.CellBounds.Y + ((e.CellBounds.Height - contentSize.Height) / 2) e.Graphics.DrawString(placeHolder, e.CellStyle.Font, brush, e.ClipBounds.X, y) End Using e.PaintErrorIcon(e.ClipBounds) e.PaintWaveLine(e.ClipBounds) e.PaintBorder(e.ClipBounds) e.Handled = True End If End If End Sub
using GrapeCity.Win.MultiRow; private void gcMultiRow1_CellPainting(object sender, GrapeCity.Win.MultiRow.CellPaintingEventArgs e) { GcMultiRow gcMultiRow = sender as GcMultiRow; if (gcMultiRow.Rows[e.RowIndex].Cells[e.CellIndex] is DateTimePickerCell) { if (e.Value == null) { string placeHolder = "(なし)"; e.PaintBackground(e.ClipBounds); Color brushColor = e.Selected ? e.CellStyle.SelectionForeColor : e.CellStyle.ForeColor; using (Brush brush = new SolidBrush(brushColor)) { SizeF contentSize = e.Graphics.MeasureString(placeHolder, e.CellStyle.Font); float y = e.CellBounds.Y + ((e.CellBounds.Height - contentSize.ToSize().Height) / 2); e.Graphics.DrawString(placeHolder, e.CellStyle.Font, brush, e.CellBounds.X, y); } e.PaintErrorIcon(e.ClipBounds); e.PaintWaveLine(e.ClipBounds); e.PaintBorder(e.ClipBounds); e.Handled = true; } } }
GcMultiRowコントロールでオーナー描画する場合はセルのドロップダウンボタンを予め描画することができないため、独自に描画処理を追加する必要があります。