3

オブジェクトのリストにバインドしており、この回答のように、イベントDataGridViewを使用して動的なセルの背景色を設定しています。これは、を除くすべての列でうまく機能します。このセルの内側 (チェックボックスの外側) をクリックすると、セルの背景がデフォルトの白に変わります。CellFormattingDataGridViewCheckboxColumn

視覚的には、セルの選択が行われているように見えますが、それを止めようと最善を尽くしています。私のセルフォーマットコードは と を設定しSelectionBackColorますBackColor。イベントを使用してセル選択を無効にしましたCellStateChangedが、他の列は選択できません。

private void PlayerGrid_CellStateChanged(オブジェクト送信者, DataGridViewCellStateChangedEventArgs e)
{
    if (e.StateChanged == DataGridViewElementStates.Selected)
       e.Cell.Selected = false;
}

チェックボックスのセルの動作をオーバーライドするための追加の回避策はありますか?

4

2 に答える 2

2

CellStateChanged次のコードをイベントに追加することで回避策を見つけました。

if (e.Cell is DataGridViewCheckBoxCell)
      e.Cell.Style.BackColor = BackgroundColor(e.Cell.RowIndex);

(BackgroundColor()行に基づいてセルの背景色を計算します。)

これにより問題は解決しますが、余分なスタイル オブジェクトが作成されるため、大きなテーブルまたは仮想テーブルのパフォーマンスの問題が発生する可能性があります。

于 2010-09-09T10:28:09.190 に答える
0

私は自分がやっていることに対して、このアプローチが好きです。現在選択されているセルを強調表示するために、マウスクリックまたはタブを使用して、任意の DataGridView セルの背景色 (チェックボックスを含む) を不可知的に変更できます。他のセルタイプが色付けされているため、他のアプローチではチェックボックスの背景が奇妙に色付けされないことがわかりました。私の例では、CellFormatting イベントでこのアプローチを使用していますが、同様の構文を他の場所で複製して成功させることができると思います。また、特にCellFormattingイベントに関連しているため、これはOPの質問により密接に答えていると思います。

void dgv_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
 {


if (W.mf.dgv.CurrentCell != null && e.RowIndex==W.mf.dgv.CurrentCell.RowIndex & e.ColumnIndex==W.mf.dgv.CurrentCell.ColumnIndex)
         {

                 W.mf.dgv.Rows[e.RowIndex].Cells[e.ColumnIndex].Style.SelectionBackColor = Color.YellowGreen;

         }
         else
         {
                 W.mf.dgv.Rows[e.RowIndex].Cells[e.ColumnIndex].Style.SelectionBackColor = W.mf.dgv.DefaultCellStyle.SelectionBackColor;

         }
}
于 2015-06-30T16:08:07.593 に答える