QA@IT

C# DataGridViewで一つのセル内の特定の文字だけフォントカラーを変える方法について

10602 PV

プログラム初心者です。
C# .netFramework4.5 で開発しています。

タイトルについての質問ですが、
ReadOnlyのグリッドで「0123456789」の文字がセルに表示されている状態の中、
「34」だけフォントカラーを変更できるか調べたところ、
DataGridViewのCellPaintingイベントで自前で制御する以外は難しいことでした。

MSDNライブラリーなどを見ても参考になるソースは下記の通りくらいしか載っていませんでした。
http://msdn.microsoft.com/ja-jp/library/system.windows.forms.datagridview.cellparsing(v=vs.110).aspx

参考になるようなソースを教えていただけたら幸いです。

大変恐縮ではありますが、ご教示の程宜しくお願いします

回答

普段使いがVB.NET なのでVB.NETのソースですが
変換してみて下さい。
(0,0)のセルに固定で描画処理のサンプルです。
sf(StringFormat)のプロパティを調整すれば中央寄せなども制御できます。

    Private Sub DataGridView1_CellPainting(sender As Object, e As System.Windows.Forms.DataGridViewCellPaintingEventArgs) Handles DataGridView1.CellPainting
        If e.RowIndex = 0 AndAlso e.ColumnIndex = 0 Then
            Dim g = e.Graphics
            Dim sf As New StringFormat()
            sf.SetMeasurableCharacterRanges({New CharacterRange(0, 3),
                                             New CharacterRange(3, 2),
                                             New CharacterRange(5, 5)})

            Dim rgs = g.MeasureCharacterRanges("0123456789", e.CellStyle.Font, e.CellBounds, sf)

            g.DrawString("012", e.CellStyle.Font, Brushes.Black, rgs(0).GetBounds(g).Location)
            g.DrawString("34", e.CellStyle.Font, Brushes.Red, rgs(1).GetBounds(g).Location)
            g.DrawString("56789", e.CellStyle.Font, Brushes.Black, rgs(2).GetBounds(g).Location)
            e.Handled = True
        End If
    End Sub


編集 履歴 (1)

それはCellParsingイベントの資料ですね。必要なのはCellPaintingイベントのコードです(似てますがスペルが違います)。

http://msdn.microsoft.com/ja-jp/library/system.windows.forms.datagridview.cellpainting(v=vs.110).aspx

これの

                    e.Graphics.DrawString((String)e.Value, e.CellStyle.Font,
                        Brushes.Crimson, e.CellBounds.X + 2,
                        e.CellBounds.Y + 2, StringFormat.GenericDefault);

の部分を頑張って書き換える形になります。
ただ.NETがやってくれている部分を代わりにやらなければならないので、プログラム初心者には大分敷居の高いところだと思います。
このサンプルでも右寄せ、左寄せなどの処理は省略されています。

編集 履歴 (1)
  • ご回答とご指摘ありがとうございます。
    初心者には敷居が高いですか・・・

    DrawString部分のヒントになりそうなソースがWEB上で見つからなくて、困っていました。

    引き続き調べてみます。
    -
  • 図形として文字を描く感じになります。DrawString だけでなく、graphicオブジェクトも含めて調べると見つけやすいかもしれません。 -
ウォッチ

この質問への回答やコメントをメールでお知らせします。