突出显示DataGridView中的选定单元格?

时间:2011-08-25 21:44:46

标签: c#-4.0 datagridview cell right-click

在下面的代码中,当用户右键单击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));

        }
    }

1 个答案:

答案 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

我必须记住这种视觉效果;谢谢你提问。