DataGridViewでセルの一部だけ色を塗りたい への返答
投稿で使用できる特殊コードの説明。(別タブで開きます。)
以下の返答は逆順(新しい順)に並んでいます。
投稿者 聖帝  (中学生)
投稿日時
2009/10/30 03:35:57
うむ。
質問ばかりしてるようだが、DataGridViewを作ればいいじゃん。
オリジナルで。そうすりゃ、カスタマも自由自在じゃん。
質問ばかりしてるようだが、DataGridViewを作ればいいじゃん。
オリジナルで。そうすりゃ、カスタマも自由自在じゃん。
投稿者 .net初心者  (社会人)
投稿日時
2009/10/29 22:49:43
るきお様
とても素早い回等ありがとうございます。
教えていただいた通り試したところ、
私のやりたかったことができました!
本当に感謝致します。
申し訳ありませんが、
一点質問よろしいでしょうか。
国語と表示した上に4/5塗りつぶすことは可能でしょうか。
(同セル上に文字と塗りつぶしをしたい場合)
宜しくお願い致します。
とても素早い回等ありがとうございます。
教えていただいた通り試したところ、
私のやりたかったことができました!
本当に感謝致します。
申し訳ありませんが、
一点質問よろしいでしょうか。
国語と表示した上に4/5塗りつぶすことは可能でしょうか。
(同セル上に文字と塗りつぶしをしたい場合)
宜しくお願い致します。
投稿者 るきお  (社会人)
投稿日時
2009/10/29 21:16:44
こんにちは。
通常とは違う方法で表示(描画)を行いたいときは「オーナー描画」と呼ばれる手法を使います。
今回の用件に当てはめるとDataGridViewのCellPaintingイベントを使用することで実現できます。
簡単なサンプルを作ってみましたので参考にしてください。
このサンプルだと枠線の色がちょっとおかしかったり、選択したときに色が変わらなかったりするので
まだちょっと物足りないですが、オーナー描画の手法は組み込まれているのでこれを参考に発展させていけばよいと思います。
実行するにはフォームにDataGridViewとButtonを貼り付けてください。
通常とは違う方法で表示(描画)を行いたいときは「オーナー描画」と呼ばれる手法を使います。
今回の用件に当てはめるとDataGridViewのCellPaintingイベントを使用することで実現できます。
簡単なサンプルを作ってみましたので参考にしてください。
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim table As New DataTable
table.Columns.Add("科目", GetType(String))
table.Columns.Add("点数", GetType(Integer))
table.Rows.Add("国語", 80)
table.Rows.Add("数学", 30)
table.Rows.Add("英語", 50)
DataGridView1.DataSource = table
End Sub
Private Sub DataGridView1_CellPainting(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellPaintingEventArgs) Handles DataGridView1.CellPainting
If e.ColumnIndex = 1 AndAlso e.RowIndex >= 0 Then
Dim BarRect As Rectangle = e.CellBounds
BarRect.Width = BarRect.Width * (e.Value / 100)
e.Graphics.FillRectangle(Brushes.White, e.CellBounds)
e.Graphics.FillRectangle(Brushes.Red, BarRect)
e.Graphics.DrawRectangle(Pens.Black, e.CellBounds)
e.Handled = True
End If
End Sub
このサンプルだと枠線の色がちょっとおかしかったり、選択したときに色が変わらなかったりするので
まだちょっと物足りないですが、オーナー描画の手法は組み込まれているのでこれを参考に発展させていけばよいと思います。
実行するにはフォームにDataGridViewとButtonを貼り付けてください。
投稿者 .net初心者  (社会人)
投稿日時
2009/10/29 19:38:41
OSはWinXP、VB2008を使用しております。
DataGridViewのセルの背景色を
入ってきた値に応じて青く塗りたいと思っております。
※例えば[1/2]という値が入ってくれば、セルの半分だけ青くしたい、
[3/5]という値が入ってくれば、セルの3/5だけ青くしたいです。
ずっと悩んでおりますが、どうしてもうまくいきません。
どなたかご教授いただけないでしょうか。
また、DataGridViewに限らず何か他に手法がある場合も
どんな些細なことでも構いませんのでお願い致します。
DataGridViewのセルの背景色を
入ってきた値に応じて青く塗りたいと思っております。
※例えば[1/2]という値が入ってくれば、セルの半分だけ青くしたい、
[3/5]という値が入ってくれば、セルの3/5だけ青くしたいです。
ずっと悩んでおりますが、どうしてもうまくいきません。
どなたかご教授いただけないでしょうか。
また、DataGridViewに限らず何か他に手法がある場合も
どんな些細なことでも構いませんのでお願い致します。
こんな感じです。
>国語と表示した上に4/5塗りつぶすことは可能でしょうか。
>(同セル上に文字と塗りつぶしをしたい場合)
オーナー描画の技法では書きたいものは全部自分で書きます。
この例では「▼描画」から「▲」の部分までが実際に描画している部分で、
この部分にe.Graphicsを使って書いたものが表示されます。
円でも三角でも画像でもe.Graphicsを使って書けば自由にカスタマイズできますので、いろいろ遊んでみてください。