タイトル | : DataGridViewの描画について |
記事No | : 10039 |
投稿日 | : 2010/04/02(Fri) 10:09 |
投稿者 | : 皐月 |
いつもお世話になっております。WindowsXPでVB2005を利用して開発を行っています。 今回tabControlの上に乗ったDataGridViewにチェックボックスを追加しました。(このDataGridViewはTabControlのタブを変更しても消えないので、子コントロールではないです。タブの切替によってDataGridViewに挿入するデータを変化させます。)質問はこのチェックボックスの再描画についてです。 このチェックボックスを条件によって、チェック可/不可を分けたかったのでReadOnlyを利用し、チェック可なチェックボックスとチェック不可なチェックボックスを作成しました。 チェック不可なものは、チェックボックスのEnableをFalseのように見せかけたかったので、以下のURLを参考にCellPainting イベントで処理を行いました。
DataGridViewのチェックボックスを押下不可にするには? http://hpcgi1.nifty.com/MADIA/VBBBS2/wwwlng.cgi?print+200704/07040078.txt
以下が実際に記述したソースです ****************************************** Private Sub DataGridView1_CellPainting(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellPaintingEventArgs) Handles DataGridView1.CellPainting '動作自体は ReadOnlyで行い、チェックボックスの見た目は以下の処理で作成する If e.ColumnIndex = cPV AndAlso e.RowIndex >= 0 Then 'セルがcPVでヘッダー以外の場合 If DataGridView1.Rows(e.RowIndex).Cells(cPV).ReadOnly = True Then 'チェックボックスのセルが、ReadOnlyの場合 Dim selected As Boolean = CBool(e.State And DataGridViewElementStates.Selected) e.PaintBackground(e.CellBounds, selected) Dim rect As Rectangle = e.CellBounds rect.Offset(0, rect.Height \ 2 - 8) rect.Height = 13 ControlPaint.DrawCheckBox(e.Graphics, rect, ButtonState.Inactive) e.Handled = True End If End If End Sub ******************************************
この記述で、tabControlのタブの切替を行った時、タブ切替前のチェックボックスの描画状態が残ってしまいチェック可能に見えてしまいます。実際はReadOnlyプロパティがTrueですので、チェックは行えずチェックしようとするとチェックボックスの見た目がEnable=Falseに変化するのですが、これではチェックボックスをチェックするまでチェックボックスのReadOnlyの状態がわかりません。どのような処理をすればタブ切替時にCellPaintingの内容が反映されるでしょうかご存知の方ご教授ください。
現状では、ウィンドウを最小化したり、ManagerTab2.ChangeTabPageVisible(x, True)などの処理でタブの数を変更するとCellPaintingの処理が上手く反映されています。
|