• ベストアンサー

DataGridViewで特定の文字の色を変更するには

DataGridViewで、特定のセルのうち、特定の文字の色を変更する方法はありますでしょうか? 例えば、 2行目2列目のセルに「あいう」と入っていた場合、 「う」のみを赤色にしたいのです。 過去の情報を色々とあさってみましたが、特定の文字のみを変更する方法は見つけられず、 もし可能でしたら、教えていただけると助かります。

質問者が選んだベストアンサー

  • ベストアンサー
  • Apr2nd
  • ベストアンサー率69% (36/52)
回答No.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 ================================================================ ※結構適当に書いているところがありますのでご参考程度に…

guccyonn
質問者

お礼

お返事が遅くなり申し訳ありません。 回答ありがとうございました。 早速実践してみます。

その他の回答 (1)

noname#259269
noname#259269
回答No.1

最終的には、HTML になって出力されるものですから、 たとえば、 あ<font color='red'>い</font>う など(もちろんスタイルシート利用でもよい)の出力になるように編集すればよいだけです。

guccyonn
質問者

補足

回答ありがとうございます。 申し訳ありません、情報が不足していました。 開発環境は プログラム言語:VB.NET2005 OS:windowsXPSP3 となっております。 ASP.NETのDataGridに対して回答して頂いたかと思いますが、DataGridViewを使用しています^^; お手数をおかけ致しますが、宜しくお願い致します。

関連するQ&A