- ベストアンサー
DataGridViewで特定の文字の色を変更するには
DataGridViewで、特定のセルのうち、特定の文字の色を変更する方法はありますでしょうか? 例えば、 2行目2列目のセルに「あいう」と入っていた場合、 「う」のみを赤色にしたいのです。 過去の情報を色々とあさってみましたが、特定の文字のみを変更する方法は見つけられず、 もし可能でしたら、教えていただけると助かります。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
文字単位で色を変えるとなると、以下の様な感じでCellPaintingイベント等で自力で描画する必要があると思います。 ※コードの前に全角空白が入っています。 ================================================================ Private Sub DataGridView1_CellPainting(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellPaintingEventArgs) Handles DataGridView1.CellPainting ' とりあえず(2, 2)のみ対象 If e.ColumnIndex = 1 AndAlso e.RowIndex = 1 Then Dim charBrush As SolidBrush Dim foreBrush As SolidBrush Dim backBrush As SolidBrush Dim redBrush As New SolidBrush(Color.Red) If (e.State And DataGridViewElementStates.Selected) = DataGridViewElementStates.Selected Then foreBrush = New SolidBrush(e.CellStyle.SelectionForeColor) backBrush = New SolidBrush(e.CellStyle.SelectionBackColor) Else foreBrush = New SolidBrush(e.CellStyle.ForeColor) backBrush = New SolidBrush(e.CellStyle.BackColor) End If ' 背景やボーダーなど描画 e.Graphics.FillRectangle(backBrush, e.CellBounds) e.Paint(e.ClipBounds, DataGridViewPaintParts.Border Or DataGridViewPaintParts.Focus) If e.Value IsNot Nothing AndAlso CStr(e.Value).Length > 0 Then Dim diffX As Integer = 0 For Each c As Char In CStr(e.Value).ToCharArray() ' "う"の場合のみ赤文字にする If c = "う"c Then charBrush = redBrush Else charBrush = foreBrush End If ' 1文字描画 e.Graphics.DrawString( _ CStr(c), _ e.CellStyle.Font, _ charBrush, _ e.CellBounds.X + diffX, _ e.CellBounds.Y + 2, _ StringFormat.GenericDefault) ' 描画した文字幅を取得して加算 diffX += _ GetCharWidth( _ e.Graphics, _ e.CellStyle.Font, _ New RectangleF(e.CellBounds.X, e.CellBounds.Y, e.CellBounds.Width, e.CellBounds.Height), _ CStr(c)) Next End If foreBrush.Dispose() backBrush.Dispose() redBrush.Dispose() e.Handled = True End If End Sub Private Function GetCharWidth(ByVal g As Graphics, ByVal f As Font, ByVal layout As RectangleF, ByVal str As String) As Integer Dim charRanges() As CharacterRange = {New CharacterRange(0, str.Length)} Dim strFmt As New StringFormat strFmt.SetMeasurableCharacterRanges(charRanges) Dim strRegions() As Region = g.MeasureCharacterRanges(str, f, layout, strFmt) Dim rect As RectangleF = strRegions(0).GetBounds(g) Return rect.Width - 1 End Function ================================================================ ※結構適当に書いているところがありますのでご参考程度に…
その他の回答 (1)
最終的には、HTML になって出力されるものですから、 たとえば、 あ<font color='red'>い</font>う など(もちろんスタイルシート利用でもよい)の出力になるように編集すればよいだけです。
補足
回答ありがとうございます。 申し訳ありません、情報が不足していました。 開発環境は プログラム言語:VB.NET2005 OS:windowsXPSP3 となっております。 ASP.NETのDataGridに対して回答して頂いたかと思いますが、DataGridViewを使用しています^^; お手数をおかけ致しますが、宜しくお願い致します。
お礼
お返事が遅くなり申し訳ありません。 回答ありがとうございました。 早速実践してみます。