ComponentOne 利用ガイド
[020] 各列の TextAlign を個別に設定しても、行全体をハイライトすると、Highlight スタイルで設定したテキスト配置で表示される
移行ガイド > 各種移行資料 > WinForms 移行情報 > FlexGrid for WinForms 移行情報 > [020] 各列の TextAlign を個別に設定しても、行全体をハイライトすると、Highlight スタイルで設定したテキスト配置で表示される
変更バージョン 2.6.20071.324
カテゴリ スタイル
対応策

詳細

旧バージョンでは、列エディタで各列の TextAlign を個別に設定すると、C1FlexGrid のプロパティウィンドウで Styles の Highlight スタイルの TextAlign を設定しても、ハイライト時には各列の TextAlign が優先されるため、ハイライト前のテキスト配置との違いは発生しませんでした。本バージョンでは、この場合、Highlight スタイルの TextAlign が優先されるため、ハイライト前のテキスト配置との違いが生じます。

これは、StylesのHighlightスタイルのTextAlignを設定した際に、スタイルのリソース情報(.resxファイル内に設定)が生成されるようになったためです。この情報が、列エディタで設定したTextAlignよりも優先されます。

Highlight スタイルの TextAlign プロパティをデフォルトのままにしておいた場合は、リソース情報は生成されないため、列エディタで設定した TextAlign の設定が使用されるので、本現象は発生しません。しかし、いったん Highlight スタイルの TextAlign プロパティを変更すると、たとえこれをデフォルトの設定値に戻したとしても、リソース情報は生成されたままとなるため、本現象が発生します。

旧バージョンと同様のテキスト配置にするには、以下の3通りの方法があります

  1. DataColumn の AllowDBNull 値を False に設定する

    c1FlexGrid1.StyleInfo =resources.GetString("C1FlexGrid1.StyleInfo");
    C1FlexGrid1.StyleInfo =resources.GetString("C1FlexGrid1.StyleInfo")
  2. FormのLoad イベントで、C1FlexGrid クラスの Styles プロパティをクリアする

    c1FlexGrid1.Styles.Clear();
    C1FlexGrid1.Styles.Clear()
  3. C1FlexGrid の OwnerDrawCell イベントを使用して、必要な列のスタイルを手動で設定する

    private void Form1_Load(object sender, EventArgs e)
    {
      for (i = 1; i <= 5; i++)
      {
        this.C1FlexGrid1.AddItem(i);
        this.C1FlexGrid1.Cols("COLUMN_A")(i) = "COLUMN_B123";
        this.C1FlexGrid1.Cols("COLUMN_B")(i) = "CB";
        this.C1FlexGrid1.Cols("COLUMN_C")(i) = 1234567890;
        this.C1FlexGrid1.Cols("COLUMN_D")(i) = "14-05-14";
      }
      this.C1FlexGrid1.DrawMode = C1.Win.C1C1FlexGrid1Grid.DrawModeEnum.OwnerDraw;
    }
    
    private void C1FlexGrid1_OwnerDrawCell(object sender, C1.Win.C1C1FlexGrid1Grid.OwnerDrawCellEventArgs e)
    {
      if (e.Col == 1 | e.Col == 3 | e.Col == 5)
      {
        C1.Win.C1C1FlexGrid1Grid.CellStyle style1 = default(C1.Win.C1C1FlexGrid1Grid.CellStyle);
        if ((C1FlexGrid1.Styles("CenterStyle") == null))
        {
          style1 = C1FlexGrid1.Styles.Add("CenterStyle");
        }
        else
        {
          style1 = C1FlexGrid1.Styles("CenterStyle");
          style1.TextAlign = C1.Win.C1C1FlexGrid1Grid.TextAlignEnum.CenterCenter;
          style1.ImageAlign = C1.Win.C1C1FlexGrid1Grid.ImageAlignEnum.CenterCenter;
        }
        e.Style = style1;
      }
    }
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
      For i = 1 To 5
        Me.C1FlexGrid1.AddItem(i)
        Me.C1FlexGrid1.Cols("COLUMN_A")(i) = "COLUMN_B123"
        Me.C1FlexGrid1.Cols("COLUMN_B")(i) = "CB"
        Me.C1FlexGrid1.Cols("COLUMN_C")(i) = 1234567890
        Me.C1FlexGrid1.Cols("COLUMN_D")(i) = "14-05-14"
      Next
      Me.C1FlexGrid1.DrawMode = C1.Win.C1C1FlexGrid1Grid.DrawModeEnum.OwnerDraw
    End Sub
    
    Private Sub C1FlexGrid1_OwnerDrawCell(sender As Object, e As C1.Win.C1C1FlexGrid1Grid.OwnerDrawCellEventArgs) Handles C1FlexGrid1.OwnerDrawCell
      If e.Col = 1 Or e.Col = 3 Or e.Col = 5 Then
        Dim style1 As C1.Win.C1C1FlexGrid1Grid.CellStyle
        If (C1FlexGrid1.Styles("CenterStyle") Is Nothing) Then
          style1 = C1FlexGrid1.Styles.Add("CenterStyle")
        Else
          style1 = C1FlexGrid1.Styles("CenterStyle")
          style1.TextAlign = C1.Win.C1C1FlexGrid1Grid.TextAlignEnum.CenterCenter
          style1.ImageAlign = C1.Win.C1C1FlexGrid1Grid.ImageAlignEnum.CenterCenter
        End If
        e.Style = style1
      End If
    End Sub
関連トピック