行、列をリサイズするとき、ヘッダの文字列が除外される
対象製品
El Tabelle for .NET 2.0J
発生環境
この現象は次のファイル バージョンのアセンブリで発生します。
・v2.0.2004.0304
・v2.0.2004.0324 (HotFix)
・v2.0.2004.0304
・v2.0.2004.0324 (HotFix)
状況
修正済み
詳細
ヘッダの境界線をダブルクリックしたり、Sheet.AutofitColumnWidth メソッドを実行すると行や列に含まれる文字列に合わせて行の高さ、列幅が自動的に調整されます。このとき、El Tabelle for .NET (1.0) ではヘッダの文字列(Header.Caption)を含みますが、
2.0 ではヘッダの文字列を除外し、セルの文字列だけで処理します。
2.0 ではヘッダの文字列を除外し、セルの文字列だけで処理します。
回避方法
この現象はファイル バージョン v2.0.2004.0521 以降のアセンブリで修正されています。
修正版は こちら からダウンロードできます。
問題が修正されたアセンブリに移行するか、次の操作を行うことで現象を回避できます。
次のようにコーディングを行うことでヘッダのワードラップが無効の場合に El Tabelle for .NET (1.0) と同様の処理を行うことができます。
[Visual Basic]
Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click
'テストデータ
Sheet1.ColumnHeaders(0).Caption = "El Tabelle"
Sheet1.ColumnHeaders.WordWrap = False
Sheet1(0, 0).Text = "ABC"
Sheet1(0, 1).Text = "123"
End Sub
Private Sub Sheet1_ColumnWidthChanged(ByVal sender As Object, _
ByVal e As GrapeCity.Win.ElTabelle.ResizedEventArgs) _
Handles Sheet1.ColumnWidthChanged
Dim i As Integer
Dim intColumnHeaderWidth As Integer
'ヘッダのワードラップが無効の場合のみ処理を行う
If Sheet1.ColumnHeaders(i).WordWrap = False Then
For i = e.SpanSize.Start To e.SpanSize.Start + e.SpanSize.Count - 1
intColumnHeaderWidth = _
GetTextWidth(Sheet1.ColumnHeaders(i).Caption, _
Sheet1.ColumnHeaders(i).Font)
'ヒント:必要に応じて余白を追加します
'intColumnHeaderWidth = intColumnHeaderWidth + 2
If Sheet1.Columns(i).Width < intColumnHeaderWidth Then
Sheet1.Columns(i).Width = intColumnHeaderWidth
End If
Next
End If
End Sub
'文字列の画面上の幅を取得する
Public Function GetTextWidth(ByVal Text As String, _
ByVal objFont As Font) As Integer
Return Graphics.FromImage(New Bitmap(1, 1)).MeasureString( _
Text, objFont).ToSize.Width()
End Function
[C#]
private void button1_Click(object sender, System.EventArgs e)
{
//テストデータ
sheet1.ColumnHeaders[0].Caption = "El Tabelle";
sheet1.ColumnHeaders.WordWrap = false;
sheet1[0, 0].Text = "ABC";
sheet1[0, 1].Text = "123";
}
private void sheet1_ColumnWidthChanged(object sender, GrapeCity.Win.ElTabelle.ResizedEventArgs e)
{
int intColumnHeaderWidth;
//ヘッダのワードラップが無効の場合のみ処理を行う
if(sheet1.ColumnHeaders[0].WordWrap == false)
{
for(int i = e.SpanSize.Start; i < (e.SpanSize.Start + e.SpanSize.Count); i++)
{
intColumnHeaderWidth = GetTextWidth(sheet1.ColumnHeaders[i].Caption, sheet1.ColumnHeaders[i].Font);
//ヒント:必要に応じて余白を追加します
//intColumnHeaderWidth = intColumnHeaderWidth + 2;
if(sheet1.Columns[i].Width < intColumnHeaderWidth)
{
sheet1.Columns[i].Width = intColumnHeaderWidth;
}
}
}
}
//文字列の画面上の幅を取得する
public int GetTextWidth(string Text, Font objFont)
{
return Graphics.FromImage(new Bitmap(1, 1)).MeasureString(Text, objFont).ToSize().Width;
}
修正版は こちら からダウンロードできます。
問題が修正されたアセンブリに移行するか、次の操作を行うことで現象を回避できます。
次のようにコーディングを行うことでヘッダのワードラップが無効の場合に El Tabelle for .NET (1.0) と同様の処理を行うことができます。
[Visual Basic]
Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click
'テストデータ
Sheet1.ColumnHeaders(0).Caption = "El Tabelle"
Sheet1.ColumnHeaders.WordWrap = False
Sheet1(0, 0).Text = "ABC"
Sheet1(0, 1).Text = "123"
End Sub
Private Sub Sheet1_ColumnWidthChanged(ByVal sender As Object, _
ByVal e As GrapeCity.Win.ElTabelle.ResizedEventArgs) _
Handles Sheet1.ColumnWidthChanged
Dim i As Integer
Dim intColumnHeaderWidth As Integer
'ヘッダのワードラップが無効の場合のみ処理を行う
If Sheet1.ColumnHeaders(i).WordWrap = False Then
For i = e.SpanSize.Start To e.SpanSize.Start + e.SpanSize.Count - 1
intColumnHeaderWidth = _
GetTextWidth(Sheet1.ColumnHeaders(i).Caption, _
Sheet1.ColumnHeaders(i).Font)
'ヒント:必要に応じて余白を追加します
'intColumnHeaderWidth = intColumnHeaderWidth + 2
If Sheet1.Columns(i).Width < intColumnHeaderWidth Then
Sheet1.Columns(i).Width = intColumnHeaderWidth
End If
Next
End If
End Sub
'文字列の画面上の幅を取得する
Public Function GetTextWidth(ByVal Text As String, _
ByVal objFont As Font) As Integer
Return Graphics.FromImage(New Bitmap(1, 1)).MeasureString( _
Text, objFont).ToSize.Width()
End Function
[C#]
private void button1_Click(object sender, System.EventArgs e)
{
//テストデータ
sheet1.ColumnHeaders[0].Caption = "El Tabelle";
sheet1.ColumnHeaders.WordWrap = false;
sheet1[0, 0].Text = "ABC";
sheet1[0, 1].Text = "123";
}
private void sheet1_ColumnWidthChanged(object sender, GrapeCity.Win.ElTabelle.ResizedEventArgs e)
{
int intColumnHeaderWidth;
//ヘッダのワードラップが無効の場合のみ処理を行う
if(sheet1.ColumnHeaders[0].WordWrap == false)
{
for(int i = e.SpanSize.Start; i < (e.SpanSize.Start + e.SpanSize.Count); i++)
{
intColumnHeaderWidth = GetTextWidth(sheet1.ColumnHeaders[i].Caption, sheet1.ColumnHeaders[i].Font);
//ヒント:必要に応じて余白を追加します
//intColumnHeaderWidth = intColumnHeaderWidth + 2;
if(sheet1.Columns[i].Width < intColumnHeaderWidth)
{
sheet1.Columns[i].Width = intColumnHeaderWidth;
}
}
}
}
//文字列の画面上の幅を取得する
public int GetTextWidth(string Text, Font objFont)
{
return Graphics.FromImage(new Bitmap(1, 1)).MeasureString(Text, objFont).ToSize().Width;
}
キーワード
ELTB03845
この文書は、以前は次のバグレポートIDで公開されていました : 3958