行、列をリサイズするとき、ヘッダの文字列が除外される

文書番号 : 14307     文書種別 : 不具合     最終更新日 : 2004/04/16
文書を印刷する
対象製品
El Tabelle for .NET 2.0J
発生環境
この現象は次のファイル バージョンのアセンブリで発生します。
・v2.0.2004.0304
・v2.0.2004.0324 (HotFix)
状況
修正済み
詳細
ヘッダの境界線をダブルクリックしたり、Sheet.AutofitColumnWidth メソッドを実行すると行や列に含まれる文字列に合わせて行の高さ、列幅が自動的に調整されます。このとき、El Tabelle for .NET (1.0) ではヘッダの文字列(Header.Caption)を含みますが、
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;
}
キーワード
ELTB03845

この文書は、以前は次のバグレポートIDで公開されていました : 3958