列ヘッダを縦書きで表示したい
対象製品
SPREAD for Windows Forms 8.0J
詳細
EnhancedColumnHeaderRendererクラスのTextOrientationプロパティの設定によってヘッダの縦書き表示を行うことができます。
また、列ヘッダレンダラを継承したカスタムクラスを作成し、PaintCellメソッドのオーバーライドにより.NET Frameworkの文字列描画機能を用いることもできます。
なお、下記サンプルではGraphicsクラスのMeasureStringメソッドを使って最適な列ヘッダの高さを取得しています。
◎サンプルコード(VB)
◎サンプルコード(C#)
また、列ヘッダレンダラを継承したカスタムクラスを作成し、PaintCellメソッドのオーバーライドにより.NET Frameworkの文字列描画機能を用いることもできます。
なお、下記サンプルではGraphicsクラスのMeasureStringメソッドを使って最適な列ヘッダの高さを取得しています。
【列ヘッダレンダラ描画イメージ】 | 【カスタムクラス描画イメージ】 |
◎サンプルコード(VB)
Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
FpSpread1.Sheets.Count = 2
FpSpread1.Sheets(0).ColumnCount = 3
FpSpread1.Sheets(1).ColumnCount = 3
'---------------------------------------------------
' 列ヘッダレンダラによる縦書き
'---------------------------------------------------
FpSpread1.Sheets(0).SheetName = "列ヘッダレンダラ"
Dim ch As New FarPoint.Win.Spread.CellType.EnhancedColumnHeaderRenderer
ch.TextOrientation = FarPoint.Win.TextOrientation.TextTopDown
ch.WordWrap = True
FpSpread1.Sheets(0).ColumnHeader.DefaultStyle.Renderer = ch
FpSpread1.Sheets(0).ColumnHeader.Cells(0, 0).Text = "データ(A)"
FpSpread1.Sheets(0).ColumnHeader.Cells(0, 1).Text = "データ(BB)"
FpSpread1.Sheets(0).ColumnHeader.Cells(0, 2).Text = "データ(CCC)"
' 列ヘッダの高さの設定(微調整含む)
Using g As Graphics = FpSpread1.CreateGraphics()
Dim maxHeight As Single = 0
For i As Integer = 0 To FpSpread1.Sheets(0).ColumnCount - 1
Dim caption As String = FpSpread1.Sheets(0).ColumnHeader.Cells(0, i).Text
Dim temp As Single = g.MeasureString(caption, FpSpread1.Font, 10).Height
If temp > maxHeight Then
maxHeight = temp
End If
Next
FpSpread1.Sheets(0).ColumnHeader.Rows(0).Height = maxHeight + 15
End Using
'---------------------------------------------------
' カスタムクラスによる縦書き
'---------------------------------------------------
FpSpread1.Sheets(1).SheetName = "カスタム"
Dim cch As New CustomRenderer
cch.WordWrap = True
FpSpread1.Sheets(1).ColumnHeader.DefaultStyle.Renderer = cch
FpSpread1.Sheets(1).ColumnHeader.Cells(0, 0).Text = "データ(A)"
FpSpread1.Sheets(1).ColumnHeader.Cells(0, 1).Text = "データ(BB)"
FpSpread1.Sheets(1).ColumnHeader.Cells(0, 2).Text = "データ(CCC)"
' 列ヘッダの高さの設定
Using g As Graphics = FpSpread1.CreateGraphics()
Dim maxHeight As Single = 0
For i As Integer = 0 To FpSpread1.Sheets(1).ColumnCount - 1
Dim caption As String = FpSpread1.Sheets(1).ColumnHeader.Cells(0, i).Text
Dim temp As Single = g.MeasureString(caption, FpSpread1.Font, 10).Height
If temp > maxHeight Then
maxHeight = temp
End If
Next
FpSpread1.Sheets(1).ColumnHeader.Rows(0).Height = maxHeight
End Using
End Sub
End Class
Public Class CustomRenderer
Inherits FarPoint.Win.Spread.CellType.EnhancedColumnHeaderRenderer
Public Overrides Sub PaintCell(ByVal g As System.Drawing.Graphics, ByVal r As System.Drawing.Rectangle, ByVal appearance As FarPoint.Win.Spread.Appearance, ByVal value As Object, ByVal isSelected As Boolean, ByVal isLocked As Boolean, ByVal zoomFactor As Single)
MyBase.PaintCell(g, r, appearance, Nothing, isSelected, isLocked, zoomFactor)
Using foreColorBrush As New SolidBrush(appearance.ForeColor)
Dim sf As New StringFormat
sf.Alignment = StringAlignment.Center
sf.LineAlignment = StringAlignment.Center
sf.FormatFlags = StringFormatFlags.DirectionVertical
If TypeOf value Is String Then
g.DrawString(value.ToString, appearance.Font, foreColorBrush, New RectangleF(r.X, r.Y, r.Width, r.Height), sf)
End If
End Using
End Sub
End Class
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
FpSpread1.Sheets.Count = 2
FpSpread1.Sheets(0).ColumnCount = 3
FpSpread1.Sheets(1).ColumnCount = 3
'---------------------------------------------------
' 列ヘッダレンダラによる縦書き
'---------------------------------------------------
FpSpread1.Sheets(0).SheetName = "列ヘッダレンダラ"
Dim ch As New FarPoint.Win.Spread.CellType.EnhancedColumnHeaderRenderer
ch.TextOrientation = FarPoint.Win.TextOrientation.TextTopDown
ch.WordWrap = True
FpSpread1.Sheets(0).ColumnHeader.DefaultStyle.Renderer = ch
FpSpread1.Sheets(0).ColumnHeader.Cells(0, 0).Text = "データ(A)"
FpSpread1.Sheets(0).ColumnHeader.Cells(0, 1).Text = "データ(BB)"
FpSpread1.Sheets(0).ColumnHeader.Cells(0, 2).Text = "データ(CCC)"
' 列ヘッダの高さの設定(微調整含む)
Using g As Graphics = FpSpread1.CreateGraphics()
Dim maxHeight As Single = 0
For i As Integer = 0 To FpSpread1.Sheets(0).ColumnCount - 1
Dim caption As String = FpSpread1.Sheets(0).ColumnHeader.Cells(0, i).Text
Dim temp As Single = g.MeasureString(caption, FpSpread1.Font, 10).Height
If temp > maxHeight Then
maxHeight = temp
End If
Next
FpSpread1.Sheets(0).ColumnHeader.Rows(0).Height = maxHeight + 15
End Using
'---------------------------------------------------
' カスタムクラスによる縦書き
'---------------------------------------------------
FpSpread1.Sheets(1).SheetName = "カスタム"
Dim cch As New CustomRenderer
cch.WordWrap = True
FpSpread1.Sheets(1).ColumnHeader.DefaultStyle.Renderer = cch
FpSpread1.Sheets(1).ColumnHeader.Cells(0, 0).Text = "データ(A)"
FpSpread1.Sheets(1).ColumnHeader.Cells(0, 1).Text = "データ(BB)"
FpSpread1.Sheets(1).ColumnHeader.Cells(0, 2).Text = "データ(CCC)"
' 列ヘッダの高さの設定
Using g As Graphics = FpSpread1.CreateGraphics()
Dim maxHeight As Single = 0
For i As Integer = 0 To FpSpread1.Sheets(1).ColumnCount - 1
Dim caption As String = FpSpread1.Sheets(1).ColumnHeader.Cells(0, i).Text
Dim temp As Single = g.MeasureString(caption, FpSpread1.Font, 10).Height
If temp > maxHeight Then
maxHeight = temp
End If
Next
FpSpread1.Sheets(1).ColumnHeader.Rows(0).Height = maxHeight
End Using
End Sub
End Class
Public Class CustomRenderer
Inherits FarPoint.Win.Spread.CellType.EnhancedColumnHeaderRenderer
Public Overrides Sub PaintCell(ByVal g As System.Drawing.Graphics, ByVal r As System.Drawing.Rectangle, ByVal appearance As FarPoint.Win.Spread.Appearance, ByVal value As Object, ByVal isSelected As Boolean, ByVal isLocked As Boolean, ByVal zoomFactor As Single)
MyBase.PaintCell(g, r, appearance, Nothing, isSelected, isLocked, zoomFactor)
Using foreColorBrush As New SolidBrush(appearance.ForeColor)
Dim sf As New StringFormat
sf.Alignment = StringAlignment.Center
sf.LineAlignment = StringAlignment.Center
sf.FormatFlags = StringFormatFlags.DirectionVertical
If TypeOf value Is String Then
g.DrawString(value.ToString, appearance.Font, foreColorBrush, New RectangleF(r.X, r.Y, r.Width, r.Height), sf)
End If
End Using
End Sub
End Class
◎サンプルコード(C#)
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
FpSpread1.Sheets.Count = 2;
FpSpread1.Sheets[0].ColumnCount = 3;
FpSpread1.Sheets[1].ColumnCount = 3;
//---------------------------------------------------
// 列ヘッダレンダラによる縦書き
//---------------------------------------------------
FpSpread1.Sheets[0].SheetName = "列ヘッダレンダラ";
FarPoint.Win.Spread.CellType.EnhancedColumnHeaderRenderer ch = new FarPoint.Win.Spread.CellType.EnhancedColumnHeaderRenderer();
ch.TextOrientation = FarPoint.Win.TextOrientation.TextTopDown;
ch.WordWrap = true;
FpSpread1.Sheets[0].ColumnHeader.DefaultStyle.Renderer = ch;
FpSpread1.Sheets[0].ColumnHeader.Cells[0, 0].Text = "データ(A)";
FpSpread1.Sheets[0].ColumnHeader.Cells[0, 1].Text = "データ(BB)";
FpSpread1.Sheets[0].ColumnHeader.Cells[0, 2].Text = "データ(CCC)";
// 列ヘッダの高さの設定(微調整含む)
using (Graphics g = FpSpread1.CreateGraphics()) {
float maxHeight = 0;
for (int i = 0; i <= FpSpread1.Sheets[0].ColumnCount - 1; i++) {
string caption = FpSpread1.Sheets[0].ColumnHeader.Cells[0, i].Text;
float temp = g.MeasureString(caption, FpSpread1.Font, 10).Height;
if (temp > maxHeight) {
maxHeight = temp;
}
}
FpSpread1.Sheets[0].ColumnHeader.Rows[0].Height = maxHeight + 15;
}
//---------------------------------------------------
// カスタムクラスによる縦書き
//---------------------------------------------------
FpSpread1.Sheets[1].SheetName = "カスタム";
CustomRenderer cch = new CustomRenderer();
cch.WordWrap = true;
FpSpread1.Sheets[1].ColumnHeader.DefaultStyle.Renderer = cch;
FpSpread1.Sheets[1].ColumnHeader.Cells[0, 0].Text = "データ(A)";
FpSpread1.Sheets[1].ColumnHeader.Cells[0, 1].Text = "データ(BB)";
FpSpread1.Sheets[1].ColumnHeader.Cells[0, 2].Text = "データ(CCC)";
// 列ヘッダの高さの設定
using (Graphics g = FpSpread1.CreateGraphics()) {
float maxHeight = 0;
for (int i = 0 ;i <= FpSpread1.Sheets[1].ColumnCount - 1; i++) {
string caption = FpSpread1.Sheets[1].ColumnHeader.Cells[0, i].Text;
float temp = g.MeasureString(caption, FpSpread1.Font, 10).Height;
if (temp > maxHeight) {
maxHeight = temp;
}
}
FpSpread1.Sheets[1].ColumnHeader.Rows[0].Height = maxHeight;
}
}
}
public class CustomRenderer : FarPoint.Win.Spread.CellType.EnhancedColumnHeaderRenderer
{
public override void PaintCell(System.Drawing.Graphics g, System.Drawing.Rectangle r, FarPoint.Win.Spread.Appearance appearance, object value, bool isSelected, bool isLocked, float zoomFactor)
{
base.PaintCell(g, r, appearance, null, isSelected, isLocked, zoomFactor);
using (SolidBrush foreColorBrush = new SolidBrush(appearance.ForeColor))
{
StringFormat sf = new StringFormat();
sf.Alignment = StringAlignment.Center;
sf.LineAlignment = StringAlignment.Center;
sf.FormatFlags = StringFormatFlags.DirectionVertical;
if (value is string)
{
g.DrawString(Convert.ToString(value), appearance.Font, foreColorBrush,new RectangleF(r.X, r.Y, r.Width, r.Height),sf);
}
}
}
}
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
FpSpread1.Sheets.Count = 2;
FpSpread1.Sheets[0].ColumnCount = 3;
FpSpread1.Sheets[1].ColumnCount = 3;
//---------------------------------------------------
// 列ヘッダレンダラによる縦書き
//---------------------------------------------------
FpSpread1.Sheets[0].SheetName = "列ヘッダレンダラ";
FarPoint.Win.Spread.CellType.EnhancedColumnHeaderRenderer ch = new FarPoint.Win.Spread.CellType.EnhancedColumnHeaderRenderer();
ch.TextOrientation = FarPoint.Win.TextOrientation.TextTopDown;
ch.WordWrap = true;
FpSpread1.Sheets[0].ColumnHeader.DefaultStyle.Renderer = ch;
FpSpread1.Sheets[0].ColumnHeader.Cells[0, 0].Text = "データ(A)";
FpSpread1.Sheets[0].ColumnHeader.Cells[0, 1].Text = "データ(BB)";
FpSpread1.Sheets[0].ColumnHeader.Cells[0, 2].Text = "データ(CCC)";
// 列ヘッダの高さの設定(微調整含む)
using (Graphics g = FpSpread1.CreateGraphics()) {
float maxHeight = 0;
for (int i = 0; i <= FpSpread1.Sheets[0].ColumnCount - 1; i++) {
string caption = FpSpread1.Sheets[0].ColumnHeader.Cells[0, i].Text;
float temp = g.MeasureString(caption, FpSpread1.Font, 10).Height;
if (temp > maxHeight) {
maxHeight = temp;
}
}
FpSpread1.Sheets[0].ColumnHeader.Rows[0].Height = maxHeight + 15;
}
//---------------------------------------------------
// カスタムクラスによる縦書き
//---------------------------------------------------
FpSpread1.Sheets[1].SheetName = "カスタム";
CustomRenderer cch = new CustomRenderer();
cch.WordWrap = true;
FpSpread1.Sheets[1].ColumnHeader.DefaultStyle.Renderer = cch;
FpSpread1.Sheets[1].ColumnHeader.Cells[0, 0].Text = "データ(A)";
FpSpread1.Sheets[1].ColumnHeader.Cells[0, 1].Text = "データ(BB)";
FpSpread1.Sheets[1].ColumnHeader.Cells[0, 2].Text = "データ(CCC)";
// 列ヘッダの高さの設定
using (Graphics g = FpSpread1.CreateGraphics()) {
float maxHeight = 0;
for (int i = 0 ;i <= FpSpread1.Sheets[1].ColumnCount - 1; i++) {
string caption = FpSpread1.Sheets[1].ColumnHeader.Cells[0, i].Text;
float temp = g.MeasureString(caption, FpSpread1.Font, 10).Height;
if (temp > maxHeight) {
maxHeight = temp;
}
}
FpSpread1.Sheets[1].ColumnHeader.Rows[0].Height = maxHeight;
}
}
}
public class CustomRenderer : FarPoint.Win.Spread.CellType.EnhancedColumnHeaderRenderer
{
public override void PaintCell(System.Drawing.Graphics g, System.Drawing.Rectangle r, FarPoint.Win.Spread.Appearance appearance, object value, bool isSelected, bool isLocked, float zoomFactor)
{
base.PaintCell(g, r, appearance, null, isSelected, isLocked, zoomFactor);
using (SolidBrush foreColorBrush = new SolidBrush(appearance.ForeColor))
{
StringFormat sf = new StringFormat();
sf.Alignment = StringAlignment.Center;
sf.LineAlignment = StringAlignment.Center;
sf.FormatFlags = StringFormatFlags.DirectionVertical;
if (value is string)
{
g.DrawString(Convert.ToString(value), appearance.Font, foreColorBrush,new RectangleF(r.X, r.Y, r.Width, r.Height),sf);
}
}
}
}
キーワード
ヘッダ