- PR -

datagridviewの列ヘッダのコンテキストメニュー

1
投稿者投稿内容
未記入
大ベテラン
会議室デビュー日: 2005/08/25
投稿数: 145
投稿日時: 2007-02-15 13:57
列ヘッダで右クリックしてコンテキストメニューを表示し
削除できるようにしたいと思っているのですが

private void dataGridView_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
if (e.Button == MouseButtons.Right)
{
ContextMenu cntmenu = new ContextMenu();
cntmenu.MenuItems.Add("削除",new EventHandler(gyosakujo));
cntmenu.Show(dataGridView,e.Location);
}

}

このようなコードを書いたところ
右クリックするとコンテキストメニューがなぜか
どの列をクリックしても
一番左端の列のヘッダ部分に表示されます。
どうしたら改善できますでしょうか?
ご存知の方教えていただけるとうれしいです。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-02-15 14:19
引用:

未記入さんの書き込み (2007-02-15 13:57) より:

右クリックするとコンテキストメニューがなぜかどの列をクリックしても一番左端の列のヘッダ部分に表示されます。


これは、

引用:

cntmenu.Show(dataGridView,e.Location);


'dataGridView' が基準になっているからではないでしょうか。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
ぽぴ王子
ぬし
会議室デビュー日: 2006/03/24
投稿数: 475
お住まい・勤務地: お住まい:城・勤務地:城
投稿日時: 2007-02-15 14:49
「右クリック」という観点ではなく「メニューを表示する必要があるとき」という
風に考えてみるといいと思います。
そうすると、DataGridView には CellContextMenuStripNeeded と
いうイベントがあるので、その中で表示するコンテキストメニューを指定して
やれば後は自動的にヨロシクやってくれると思います。

コード:

    private void dataGridView1_CellContextMenuStripNeeded(
        object sender,
        DataGridViewCellContextMenuStripNeededEventArgs e)
    {
      // 行ヘッダで右クリックしたらメニューを表示
      if (e.RowIndex < 0)
      {
        e.ContextMenuStrip = contextMenuStrip2;
      }
    }


こんな感じで。
_________________
ぽぴ王子@わんくま同盟
ぽぴ王子の人生プログラミング中 / ぽぴンち。
未記入
大ベテラン
会議室デビュー日: 2005/08/25
投稿数: 145
投稿日時: 2007-02-16 17:22
ありがとうございます。
色々とためさせていただきます。
未記入
大ベテラン
会議室デビュー日: 2005/08/25
投稿数: 145
投稿日時: 2007-02-19 14:06
ぽぴ王子さんの教えていただいた方法を試させていただきました。

そうすると、セルの中で右クリックすると
毎度おなじみの、コピーやら、切り取り、削除などが
表示されますね。
あと、それの副産物といいますかなんといいますか
セルの上にマウスを持っていくとセルの内容が
バルーン表示されるようになりました。

なんだか、コンテキストメニューと、バルーン表示って
兄弟?な感じの関係なのでしょうか?
1

スキルアップ/キャリアアップ(JOB@IT)