2017-10-10 24 views
0

DataGridViewButtonColumnDataGridViewCheckBoxColumnのように動作します。ボタン内にある画像がtruefalseとして別の画像があり、プロパティにDataMemberがバインドされていることを意味します。 DataGridViewCheckBoxColumnoverridepaintメソッドを継承するクラスは "すべき"と思う。DataGridViewCheckBoxColumnとして機能するDataGridViewButtonColumn

+0

だからあなたの質問は何ですか?何を試しましたか? –

+0

これまでのところ、私はペイントの方法で立ち往生しています。それで何をすべきかわからない – ihisham

+0

何かを継承する必要はありません。グリッドのCellPaintingイベントを使用するだけです。 – LarsTech

答えて

1

DataGridViewCheckBoxColumnを使用しますが、CellPaintイベントを処理すると、DataGridViewというイベントが表示され、チェックされた状態とチェックされていない状態の画像が描画されます。

作成FormForm1命名し、フォーム上のDataGridViewコントロールをドロップすると、コードを次のようにForm1.csの内容を交換してください。また、Checkedenter image description hereUnCheckedenter image description hereの画像をResourcesに追加してください。

次に、あなたは、このような結果が表示されます。

enter image description here

public Form1() 
{ 
    InitializeComponent(); 
    this.Load += Form1_Load; 
    this.dataGridView1.CellPainting += dataGridView1_CellPainting; 
} 
private void Form1_Load(object sender, EventArgs e) 
{ 
    var dt = new DataTable(); 
    dt.Columns.Add("Column1", typeof(bool)); 
    dt.Rows.Add(false); 
    dt.Rows.Add(true); 
    this.dataGridView1.DataSource = dt; 
} 
void dataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e) 
{ 
    if (e.ColumnIndex == 0 && e.RowIndex >= 0) 
    { 
     var value = (bool?)e.FormattedValue; 
     e.Paint(e.CellBounds, DataGridViewPaintParts.All & 
           ~DataGridViewPaintParts.ContentForeground); 
     var img = value.HasValue && value.Value ? 
      Properties.Resources.Checked : Properties.Resources.UnChecked; 
     var size = img.Size; 
     var location = new Point((e.CellBounds.Width - size.Width)/2, 
            (e.CellBounds.Height - size.Height)/2); 
     location.Offset(e.CellBounds.Location); 
     e.Graphics.DrawImage(img, location); 
     e.Handled = true; 
    } 
} 
+0

簡単な質問私はコードをスタンドアローンのDataGridViewColumnに移動したので、自由に使用できます。それは動作していますが、私は編集モードになっているときにビジュアルアップデートを取得しません。アップデートは、終了するときにのみ有効です。どんな考え? – ihisham

+0

'DataGridViewCheckBoxColumn'から派生してもよろしいですか?うーん、あなたが作成したカスタム列のコードを含む新しい質問を投稿するほうがいいかもしれません。 –

+0

ここで私が使用したコードで問題を投稿するhttps://stackoverflow.com/questions/46709110/custom-datagridviewcheckboxcell-visual-update-doesnt-work-in-edit-mode – ihisham

関連する問題