在下面的代码中,当用户右键单击DataGridView中的单元格时,我会显示一个上下文菜单。我也喜欢用户右键单击的单元格来更改背景颜色,以便他们可以看到他们“右键单击选中”的单元格。有没有办法在下面的代码中添加一些东西,以便发生这种情况?
private void dataGridView2_MouseClick(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Right)
{
ContextMenu m = new ContextMenu();
MenuItem mnuCopy = new MenuItem("Copy");
mnuCopy.Click += new EventHandler(mnuCopy_Click);
m.MenuItems.Add(mnuCopy);
int currentMouseOverRow = dataGridView2.HitTest(e.X, e.Y).RowIndex;
m.Show(dataGridView2, new Point(e.X, e.Y));
}
}
答案 0 :(得分:2)
很明显你已经入侵了我的工作站,并且看到了我最近工作过的一些东西。我夸大了一点,因为我没有完全按照你想做的那样做,但我做了一些调整。
我会修改您的MouseClick
事件以获取DGV的CurrentCell
。完成后,将CurrentCell
的{{1}}属性设置为您想要的Style
。像这样:
SelectionBackColor
上面有点'空气代码-y'(换句话说,我没有尝试将它与你的代码合并并运行它)但我希望你能得到这个想法。请注意,我通过命中测试检查单击了一个单元格;如果你不这样做而且用户没有点击一个单元格,你可能会遇到一些问题。
现在存在的问题是,此代码将更改您右键单击的所有单元格的// ...
DataGridView.HitTestInfo hti = dataGridView2.HitTest(e.X, e.Y);
if (hti.Type == DataGridViewHitTestType.Cell) {
dataGridView2.CurrentCell = dataGridView2.Rows[hti.RowIndex].Cells[hti.ColumnIndex];
dataGridView2.CurrentCell.Style = new DataGridViewCellStyle { SelectionBackColor = System.Drawing.Color.Yellow};
}
//...
。在DGV的SelectionBackColor
事件中很容易恢复此属性:
CellLeave
我必须记住这种视觉效果;谢谢你提问。