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 件のコメント:
コメントを投稿