我有一个带有五列和上下文菜单条的数据网格视图,其中包含项目和子项目。当我右键单击最后一列时,我想打开上下文菜单。
我试过这段代码,但它是打开的上下文菜单条,没有子项目。
dataGrid.Columns[dataGrid.Columns.Count].HeaderCell.ContextMenuStrip = contextMenuStrip1;
我有一个带有五列和上下文菜单条的数据网格视图,其中包含项目和子项目。当我右键单击最后一列时,我想打开上下文菜单。
我试过这段代码,但它是打开的上下文菜单条,没有子项目。
dataGrid.Columns[dataGrid.Columns.Count].HeaderCell.ContextMenuStrip = contextMenuStrip1;
如果您的用户右键单击 DataGridView 最后一列的标题,您似乎想要打开 ContextMenuStrip。我将使用 DataGridViewMouseDown
事件并在该事件中检查这些条件,如果满足它们,请调用Show
ContextMenuStrip 的方法。
像这样:
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);
}
}
}
如果您的意思是要将上下文菜单附加到最后一列的标题,那么您的方向可能是正确的。但最后一列的索引是dataGrid.Columns.Count - 1
. 所以,这段代码对我来说很好:
dataGrid.Columns[dataGrid.Columns.Count - 1].HeaderCell.ContextMenuStrip = contextMenuStrip1; ?
子项目已到位。