2007年11月16日金曜日

DataGridViewとContextMenuStrip

ContextMenuStripを利用してちょっとしたメニューを出したりすることはよくあるんだけど、その発生元がDataGridViewになった場合はちょっと手間が必要になる。

というのも、DataGridView.ContextMenuStripプロパティで設定したものは、DataGridView全体に対して有効になるので、例えば列ヘッダ(ColumnHeader)や行ヘッダ(RowHeader)でContextMenuStripを切り替えたいなんて時には、ちょっとだけ細工が必要になるんだよね。

  • 列ヘッダ

列ヘッダで独自にContextMenuStripを使う場合は、DataGridViewColumn.HeaderCell.ContextMenuStrip、と下っていって設定する。それで今のところ最もベターなロジック記述場所はというと、DataGridView.ColumnAddedイベントの中。
Columnが追加された際に発生するイベントごとにContextMenuStripを指定してあげればいいかな、と思われ。
単発プログラムでなく汎用的に使う場合とかなら、DataGridView.OnColumnAddedメソッドをオーバーライドして対応するのがベターかな。

  • 行ヘッダ

行ヘッダの場合も似たような事情で、DataGridViewRow.HeaderCell.ContextMenuStrip、となる。
列ヘッダの場合と異なるのは、「今存在する全ての行に対して設定する必要がある」というところ。なのでベターな記述場所はDataGridView.RowsAddedイベントまたはDataGridView.OnRowsAddedメソッドとなると思う。

0 件のコメント:

コメントを投稿