実現したいこと
DataGridViewにおいてクリックした行を囲う枠線を描画する
前提
Visual Studio 2022のDataGridViewについての質問です。
上記の動作をRowPostPaintイベント内でDrawLineを使ってできるようにしたいのですが、選択(クリック)したセルの行に枠線が描画されずダブルクリックしたセルに枠線の一部が描画されているような状態になります。
他の動作も不安定で、クリックして描画されることもあればダブルクリックして描画されることがあったり、一回前に選択(クリック)したセルの枠線が消えたりまたは描画されたりします。
DataGridViewの仕様は、全体の大きさは縦385ピクセル、横480ピクセル、セルの構成は縦1~100マス、横8マスで、セルの大きさは縦360~3ピクセル、横60ピクセルです。行のヘッダーは消しています。
またSelectionBackColorはTransparentに変更しています。ほかにもパラメータは数個いじっているのでそれが原因になっている可能性も考えられますが自分にはわかりませんでした。
該当のソースコード
C#
1 private void RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e) 2 { 3 if (cellclicker)//cellclickerはどこかのセルがクリックしたときにtrueになります。 4 { 5 //上底 6 e.Graphics.DrawLine(pen, 0, selectflame.Y, 480, selectflame.Y); 7 //下底 8 e.Graphics.DrawLine(pen, 0, selectflame.Y + timeTable.RowTemplate.Height - 1, 480, selectflame.Y + timeTable.RowTemplate.Height - 1); 9 //左 10 e.Graphics.DrawLine(pen, 0, selectflame.Y, 0, selectflame.Y + timeTable.RowTemplate.Height); 11 //右 12 e.Graphics.DrawLine(pen, 480, selectflame.Y, 480, selectflame.Y + timeTable.RowTemplate.Height); 13 14 cellclicker = false; 15 } 16 }
試したこと
最初はCellPaintingイベント内で処理しようとしていましたが、うまくいきませんでした。でも枠線の描画する範囲を変えれば、選択(クリック)したセルに枠線を描画する、というような動作は作れました(エクセル的な)。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。

回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2024/03/06 22:46