ヘッダをオーナー描画する
対象製品
El Tabelle MultiRow 4.0J
詳細
El Tabelle MultiRow 4.0J では、列ヘッダや行ヘッダのスタイルを簡単に切り替える Style プロパティを提供していますが、開発者がヘッダ単位で独自の描画を実装することも可能です。
独自の描画(オーナー描画)は、MultiRowSheet.DrawElement イベントでコーディングします。このイベントは、ヘッダの OwnerDraw プロパティが true のとき、ヘッダ単位(セル単位)で発生します。
[Visual Basic]
[C#]
独自の描画(オーナー描画)は、MultiRowSheet.DrawElement イベントでコーディングします。このイベントは、ヘッダの OwnerDraw プロパティが true のとき、ヘッダ単位(セル単位)で発生します。
[Visual Basic]
Private Sub Form1_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
Dim objTemplate As GrapeCity.Win.ElTabelle.Template _
= New GrapeCity.Win.ElTabelle.Template()
'列ヘッダのキャプションを設定する
objTemplate.ColumnHeaders(0, 0).Caption = "Hello"
objTemplate.ColumnHeaders(0, 1).Caption = "出荷"
'列ヘッダをマージする
objTemplate.ColumnHeaders.Merge(New GrapeCity.Win.ElTabelle.TRange(0, 1, 1, 1))
MultiRowSheet1.Template = objTemplate
'オーナー描画を有効にする
MultiRowSheet1.ColumnHeaders(0, 0).OwnerDraw = True
MultiRowSheet1.ColumnHeaders(0, 1).OwnerDraw = True
End Sub
Private Sub MultiRowSheet1_DrawElement(ByVal sender As System.Object, _
ByVal e As GrapeCity.Win.ElTabelle.MDrawElementEventArgs) _
Handles MultiRowSheet1.DrawElement
'列ヘッダの場合
If e.Region = GrapeCity.Win.ElTabelle.SheetRegion.ColumnHeaders Then
Dim borderMargin As Integer = 1
Dim captionMargin As Integer = 2
e.Graphics.FillRectangle(Brushes.Gray, e.Bounds)
'3D効果の明るい線を描画する
Dim whitePen As Pen = New Pen(Brushes.White, 2)
e.Graphics.DrawLine(whitePen, New Point(e.Bounds.Left, e.Bounds.Top), _
New Point(e.Bounds.Left + e.Bounds.Width, e.Bounds.Top))
e.Graphics.DrawLine(whitePen, New Point(e.Bounds.Left, e.Bounds.Top), _
New Point(e.Bounds.Left, e.Bounds.Top + e.Bounds.Height))
'3D効果の暗い線を描画する
Dim blackPen As Pen = New Pen(Brushes.Black, 2)
e.Graphics.DrawLine(blackPen, New Point(e.Bounds.Left, e.Bounds.Top + e.Bounds.Height - borderMargin), _
New Point(e.Bounds.Left + e.Bounds.Width, e.Bounds.Top + e.Bounds.Height - borderMargin))
e.Graphics.DrawLine(blackPen, New Point(e.Bounds.Left + e.Bounds.Width - borderMargin, e.Bounds.Top), _
New Point(e.Bounds.Left + e.Bounds.Width - borderMargin, e.Bounds.Top + e.Bounds.Height))
'キャプションを描画する
Dim caption As String = CType(sender, GrapeCity.Win.ElTabelle.MultiRowSheet).ColumnHeaders(e.Range.LeftColumn, e.Range.TopRow).Caption
Dim font As Font = CType(sender, GrapeCity.Win.ElTabelle.MultiRowSheet).ColumnHeaders(e.Range.LeftColumn, e.Range.TopRow).Font
e.Graphics.DrawString(caption, font, Brushes.White, New PointF(e.Bounds.Left + captionMargin, e.Bounds.Top + captionMargin))
whitePen.Dispose()
blackPen.Dispose()
End If
End Sub
ByVal e As System.EventArgs) Handles MyBase.Load
Dim objTemplate As GrapeCity.Win.ElTabelle.Template _
= New GrapeCity.Win.ElTabelle.Template()
'列ヘッダのキャプションを設定する
objTemplate.ColumnHeaders(0, 0).Caption = "Hello"
objTemplate.ColumnHeaders(0, 1).Caption = "出荷"
'列ヘッダをマージする
objTemplate.ColumnHeaders.Merge(New GrapeCity.Win.ElTabelle.TRange(0, 1, 1, 1))
MultiRowSheet1.Template = objTemplate
'オーナー描画を有効にする
MultiRowSheet1.ColumnHeaders(0, 0).OwnerDraw = True
MultiRowSheet1.ColumnHeaders(0, 1).OwnerDraw = True
End Sub
Private Sub MultiRowSheet1_DrawElement(ByVal sender As System.Object, _
ByVal e As GrapeCity.Win.ElTabelle.MDrawElementEventArgs) _
Handles MultiRowSheet1.DrawElement
'列ヘッダの場合
If e.Region = GrapeCity.Win.ElTabelle.SheetRegion.ColumnHeaders Then
Dim borderMargin As Integer = 1
Dim captionMargin As Integer = 2
e.Graphics.FillRectangle(Brushes.Gray, e.Bounds)
'3D効果の明るい線を描画する
Dim whitePen As Pen = New Pen(Brushes.White, 2)
e.Graphics.DrawLine(whitePen, New Point(e.Bounds.Left, e.Bounds.Top), _
New Point(e.Bounds.Left + e.Bounds.Width, e.Bounds.Top))
e.Graphics.DrawLine(whitePen, New Point(e.Bounds.Left, e.Bounds.Top), _
New Point(e.Bounds.Left, e.Bounds.Top + e.Bounds.Height))
'3D効果の暗い線を描画する
Dim blackPen As Pen = New Pen(Brushes.Black, 2)
e.Graphics.DrawLine(blackPen, New Point(e.Bounds.Left, e.Bounds.Top + e.Bounds.Height - borderMargin), _
New Point(e.Bounds.Left + e.Bounds.Width, e.Bounds.Top + e.Bounds.Height - borderMargin))
e.Graphics.DrawLine(blackPen, New Point(e.Bounds.Left + e.Bounds.Width - borderMargin, e.Bounds.Top), _
New Point(e.Bounds.Left + e.Bounds.Width - borderMargin, e.Bounds.Top + e.Bounds.Height))
'キャプションを描画する
Dim caption As String = CType(sender, GrapeCity.Win.ElTabelle.MultiRowSheet).ColumnHeaders(e.Range.LeftColumn, e.Range.TopRow).Caption
Dim font As Font = CType(sender, GrapeCity.Win.ElTabelle.MultiRowSheet).ColumnHeaders(e.Range.LeftColumn, e.Range.TopRow).Font
e.Graphics.DrawString(caption, font, Brushes.White, New PointF(e.Bounds.Left + captionMargin, e.Bounds.Top + captionMargin))
whitePen.Dispose()
blackPen.Dispose()
End If
End Sub
[C#]
private void Form_Load(object sender, EventArgs e)
{
GrapeCity.Win.ElTabelle.Template objTemplate = new GrapeCity.Win.ElTabelle.Template();
//列ヘッダのキャプションを設定する
objTemplate.ColumnHeaders[0, 0].Caption = "Hello";
objTemplate.ColumnHeaders[0, 1].Caption = "出荷";
//列ヘッダをマージする
objTemplate.ColumnHeaders.Merge(new GrapeCity.Win.ElTabelle.TRange(0, 1, 1, 1));
multiRowSheet1.Template = objTemplate;
//オーナー描画を有効にする
multiRowSheet1.ColumnHeaders[0, 0].OwnerDraw = true;
multiRowSheet1.ColumnHeaders[0, 1].OwnerDraw = true;
}
private void multiRowSheet1_DrawElement(object sender, GrapeCity.Win.ElTabelle.MDrawElementEventArgs e)
{
//列ヘッダの場合
if (e.Region == GrapeCity.Win.ElTabelle.SheetRegion.ColumnHeaders)
{
int borderMargin = 1;
int captionMargin = 2;
e.Graphics.FillRectangle(Brushes.Gray, e.Bounds);
//3D効果の明るい線を描画する
Pen whitePen = new Pen(Brushes.White, 2);
e.Graphics.DrawLine(whitePen, new Point(e.Bounds.Left, e.Bounds.Top),
new Point(e.Bounds.Left + e.Bounds.Width, e.Bounds.Top));
e.Graphics.DrawLine(whitePen, new Point(e.Bounds.Left, e.Bounds.Top),
new Point(e.Bounds.Left, e.Bounds.Top + e.Bounds.Height));
//3D効果の暗い線を描画する
Pen blackPen = new Pen(Brushes.Black, 2);
e.Graphics.DrawLine(blackPen, new Point(e.Bounds.Left, e.Bounds.Top + e.Bounds.Height - borderMargin),
new Point(e.Bounds.Left + e.Bounds.Width, e.Bounds.Top + e.Bounds.Height - borderMargin));
e.Graphics.DrawLine(blackPen, new Point(e.Bounds.Left + e.Bounds.Width - borderMargin, e.Bounds.Top),
new Point(e.Bounds.Left + e.Bounds.Width - borderMargin, e.Bounds.Top + e.Bounds.Height));
//キャプションを描画する
string caption = ((GrapeCity.Win.ElTabelle.MultiRowSheet)sender).ColumnHeaders[e.Range.LeftColumn, e.Range.TopRow].Caption;
Font font = ((GrapeCity.Win.ElTabelle.MultiRowSheet)sender).ColumnHeaders[e.Range.LeftColumn, e.Range.TopRow].Font;
e.Graphics.DrawString(caption, font, Brushes.White, new PointF(e.Bounds.Left + captionMargin, e.Bounds.Top + captionMargin));
whitePen.Dispose();
blackPen.Dispose();
}
}
{
GrapeCity.Win.ElTabelle.Template objTemplate = new GrapeCity.Win.ElTabelle.Template();
//列ヘッダのキャプションを設定する
objTemplate.ColumnHeaders[0, 0].Caption = "Hello";
objTemplate.ColumnHeaders[0, 1].Caption = "出荷";
//列ヘッダをマージする
objTemplate.ColumnHeaders.Merge(new GrapeCity.Win.ElTabelle.TRange(0, 1, 1, 1));
multiRowSheet1.Template = objTemplate;
//オーナー描画を有効にする
multiRowSheet1.ColumnHeaders[0, 0].OwnerDraw = true;
multiRowSheet1.ColumnHeaders[0, 1].OwnerDraw = true;
}
private void multiRowSheet1_DrawElement(object sender, GrapeCity.Win.ElTabelle.MDrawElementEventArgs e)
{
//列ヘッダの場合
if (e.Region == GrapeCity.Win.ElTabelle.SheetRegion.ColumnHeaders)
{
int borderMargin = 1;
int captionMargin = 2;
e.Graphics.FillRectangle(Brushes.Gray, e.Bounds);
//3D効果の明るい線を描画する
Pen whitePen = new Pen(Brushes.White, 2);
e.Graphics.DrawLine(whitePen, new Point(e.Bounds.Left, e.Bounds.Top),
new Point(e.Bounds.Left + e.Bounds.Width, e.Bounds.Top));
e.Graphics.DrawLine(whitePen, new Point(e.Bounds.Left, e.Bounds.Top),
new Point(e.Bounds.Left, e.Bounds.Top + e.Bounds.Height));
//3D効果の暗い線を描画する
Pen blackPen = new Pen(Brushes.Black, 2);
e.Graphics.DrawLine(blackPen, new Point(e.Bounds.Left, e.Bounds.Top + e.Bounds.Height - borderMargin),
new Point(e.Bounds.Left + e.Bounds.Width, e.Bounds.Top + e.Bounds.Height - borderMargin));
e.Graphics.DrawLine(blackPen, new Point(e.Bounds.Left + e.Bounds.Width - borderMargin, e.Bounds.Top),
new Point(e.Bounds.Left + e.Bounds.Width - borderMargin, e.Bounds.Top + e.Bounds.Height));
//キャプションを描画する
string caption = ((GrapeCity.Win.ElTabelle.MultiRowSheet)sender).ColumnHeaders[e.Range.LeftColumn, e.Range.TopRow].Caption;
Font font = ((GrapeCity.Win.ElTabelle.MultiRowSheet)sender).ColumnHeaders[e.Range.LeftColumn, e.Range.TopRow].Font;
e.Graphics.DrawString(caption, font, Brushes.White, new PointF(e.Bounds.Left + captionMargin, e.Bounds.Top + captionMargin));
whitePen.Dispose();
blackPen.Dispose();
}
}
キーワード
HowTo
この文書は、以前は次のFAQ IDで公開されていました : 9372