2011-07-22 19 views
1

項目とサブ項目を持つ5つの列とコンテキストメニューストリップを持つdatagridviewがあります。最後の列を右クリックすると、コンテキストメニューが開きます。C# - DatagridViewとContextMenuStrip

私はこのコードを試しましたが、サブメニューのない開いたコンテキストメニューストリップです。

dataGrid.Columns[dataGrid.Columns.Count].HeaderCell.ContextMenuStrip = contextMenuStrip1; 

答えて

5

DataGridViewの最後の列のヘッダーをユーザーが右クリックすると、ContextMenuStripを開くように見えます。私はDataGridView MouseDownイベントを使用し、そのイベントでこれらの条件をチェックし、満たされていればContextMenuStripのShowメソッドを呼び出します。このよう

private void dataGridView1_MouseDown(object sender, MouseEventArgs e) { 
    if (e.Button == MouseButtons.Right) { 
     var ht = dataGridView1.HitTest(e.X, e.Y); 
     // See if the user right-clicked over the header of the last column. 
     if (( ht.ColumnIndex == dataGridView1.Columns.Count - 1) 
      && (ht.Type == DataGridViewHitTestType.ColumnHeader)) { 
      // This positions the menu at the mouse's location. 
      contextMenuStrip1.Show(MousePosition); 
     } 
    } 
} 
+0

ジェイリッグスあなたの例では動作します。 Tnx! – PATO7

0

あなたがあなたの最後の列のヘッダにコンテキストメニューを添付したい意味場合は、あなたの方向はおそらく正しいです。しかし最後の列のインデックスはdataGrid.Columns.Count - 1です。したがって、このコードは私のためにうまく動作します:

dataGrid.Columns[dataGrid.Columns.Count - 1].HeaderCell.ContextMenuStrip = contextMenuStrip1; ? 

サブアイテムが配置されています。