C# - DatagridView和ContextMenuStrip

时间:2011-07-22 00:05:10

标签: c# datagridview items contextmenustrip

我有一个包含五列和上下文菜单条的datagridview,它们包含项目和子项目。当我右键单击最后一列时,我想打开上下文菜单。

我尝试了这段代码,但它是没有子项的打开上下文菜单条。

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

2 个答案:

答案 0 :(得分: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);
        }
    }
}

答案 1 :(得分:0)

如果您的意思是要将上下文菜单附加到上一栏的标题,那么您的方向可能正确。但最后一列的索引是dataGrid.Columns.Count - 1。所以,这段代码对我来说很好用:

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

子项目到位。