列ヘッダを縦書きで表示したい
対象製品
SPREAD for Windows Forms 7.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);
}
}
}
}
関連情報
- セルを選択した時の行列ヘッダのハイライト表示を抑制したい
- コーディングによる行・列ヘッダのカスタマイズ方法
- シートの左上(角)ヘッダに文字列を表示することは出来ますか?
- ヘッダに複数行の文字列を設定する方法
- ヘッダに設定した文字列の折り返しを抑制したい
キーワード
「ヘッダ」