2016-03-20 30 views
1

デフォルトのDataGridViewCheckBoxCellを色付きの長方形で上書きしようとしています。CellPaintingのDataGridViewCheckBoxCellバックカラーを変更する

私は、次の記事を見つけましたが、期待どおりに動作しない:ここでは Drawing a filled circle or rectangle inside a DataGridViewCell in C# Winforms

は私のコードです:

private void OrdersComponentsDGV_CellPainting(object sender, DataGridViewCellPaintingEventArgs e) 
{ 
    if (e.RowIndex >= 0 && e.ColumnIndex > 0) 
    { 
     const float size = 20; 

     var datagridview = (sender as DataGridView); 
     var cell = datagridview.Rows[e.RowIndex].Cells[e.ColumnIndex]; 

     if (cell.Value != DBNull.Value && (bool)cell.Value) 
     { 
      // center of the cell 
      var x = e.CellBounds.X + e.CellBounds.Width/2 - size/2; 
      var y = e.CellBounds.Y + e.CellBounds.Height/2 - size/2; 

      RectangleF rectangle = new RectangleF(x, y, size, size); 
      e.Graphics.FillRectangle(Brushes.Yellow, rectangle);      
      e.PaintContent(e.CellBounds);      
      e.Handled = true; 
     } 
    } 
} 

初めてロードした後、全てチェックした細胞は灰色背景色を持っています。これは、datagridviewをスクロールした後に消えてから消えます。

イラスト:また、私はFullRowSelectへのDataGridViewのselectionMode設定enter image description here

OrdersComponentsDGV.SelectionMode = DataGridViewSelectionMode.FullRowSelect; 

をしかし、上述したように、私はCellPaintingを実装した後、青色選択背景色がなくなっている(画像に表示)チェックボックスがオンになっています。

答えて

1

あなたは(DataGridView.CellPainting Eventのドキュメントを示唆して同じように)あなた自身の四角形を描画する前に、基本背景塗装方法を使用することができます

if (cell.Value is bool && (bool)cell.Value) 
{ 
    e.PaintBackground(e.ClipBounds, cell.Selected);  

    // center of the cell 
    var x = e.CellBounds.X + e.CellBounds.Width/2 - size/2; 
    var y = e.CellBounds.Y + e.CellBounds.Height/2 - size/2; 

    RectangleF rectangle = new RectangleF(x, y, size, size); 
    e.Graphics.FillRectangle(Brushes.Yellow, rectangle); 

    e.PaintContent(e.ClipBounds); 

    e.Handled = true; 
} 
+0

はあなたに@Ashをありがとう、それは二つの問題を解決しました。 – ehh

関連する問題