【问题标题】:DataGridView Mousedown and Mouseup cell background color change doesn't workDataGridView Mousedown 和 Mouseup 单元格背景颜色更改不起作用
【发布时间】:2016-03-08 14:18:12
【问题描述】:

在我的 C# datagridview 上,我希望确认用户确实点击了单元格。

我正在使用 datagridview 的 MouseDown 和 MouseUp 事件。通过将单元格颜色更改为蓝色,MouseDown 事件的代码正常运行,但 MouseUp 事件不会将单元格的颜色更改回透明。

结果函数是我点击的所有单元格变成蓝色,并保持蓝色。

我没有正确调用 Refresh 方法吗?有没有更好的方法来实现同样的目标?

这是我的代码:

private void Selector_dataGridView_CellMouseDown(object sender, DataGridViewCellMouseEventArgs e)
        {
            DataGridViewCellStyle CellStyle = new DataGridViewCellStyle();
            CellStyle.BackColor = Color.Blue;
            Selector_dataGridView.Rows[e.RowIndex].Cells[e.ColumnIndex].Style = CellStyle;
            Selector_dataGridView.Refresh();
        }

        private void Selector_dataGridView_CellMouseUp(object sender, DataGridViewCellMouseEventArgs e)
        {
            DataGridViewCellStyle CellStyle = new DataGridViewCellStyle();
            CellStyle.BackColor = Color.Transparent;
            Selector_dataGridView.Rows[e.RowIndex].Cells[e.ColumnIndex].Style = CellStyle;
            Selector_dataGridView.Refresh();
        }

【问题讨论】:

    标签: c# datagridview


    【解决方案1】:

    您只需要在MouseDown 中输入一行:

    Selector_dataGridView.Rows[e.RowIndex].Cells[e.ColumnIndex].Style.SelectionBackColor = Color.Blue;
    

    并在MouseUp 中恢复:

    Selector_dataGridView.Rows[e.RowIndex].Cells[e.ColumnIndex].Style.SelectionBackColor = Color.White;
    

    【讨论】:

    • 这行得通。看起来我必须使用 Color.White,我不能使用 Color.Empty 或 Color.Transparent。谢谢!
    【解决方案2】:

    在您的 Selector_dataGridView_CellMouseUp 事件中,尝试将颜色更改为空而不是透明:

    CellStyle.BackColor = Color.Empty;
    

    【讨论】:

    • 它现在改变了行为,但仍然不太正确。当我单击另一个单元格时,该单元格正确地变为“空”。所以会有一步的滞后。我的 Refresh 函数未正确调用。我是否正确使用了刷新?
    【解决方案3】:

    单元格鼠标向上处理程序将在鼠标指针当时所在的任何单元格上触发。我假设您在单击后将鼠标从单击的单元格上移开。我建议在 mouseup 上清除/刷新所有单元格以使其透明,但如果您要处理大量单元格,这将有点矫枉过正。

    https://msdn.microsoft.com/en-us/library/system.windows.forms.datagridview.cellmouseup(v=vs.110).aspx

    【讨论】:

    • 我在 mouseup 事件上放了一个断点,它引用了正确的行和列索引。我怀疑我调用的 Refresh 方法使用不正确。它有些如何不在 mouseup 上重绘,而只是在 mousedown 上重绘。
    猜你喜欢
    • 2013-04-12
    • 2016-05-27
    • 1970-01-01
    • 2015-09-29
    • 1970-01-01
    • 2014-10-08
    • 1970-01-01
    • 2014-02-27
    • 2011-09-24
    相关资源
    最近更新 更多