DataGridViewCell's样式没有及时更新

本文关键字:更新 样式 DataGridViewCell | 更新日期: 2023-09-27 18:18:13

我正在编写一个c#应用程序(windows窗体),其中我有一个10x10的DataGridView,它代表一个迷宫。当单击一个单元格时,我将相应的x和y添加到2D数组中。每个单元格被点击,应该显示一个黑色的背景。

在CellClick

:

        int row = dataGridView1.CurrentCell.RowIndex;
        int column = dataGridView1.CurrentCell.ColumnIndex;
        maze[row, column] = 1;
        dataGridView1.Refresh();

我还实现了CellFormatting事件的处理程序:

if (maze[e.RowIndex,e.ColumnIndex] == 1){
       e.CellStyle.BackColor = Color.Black;
   }

现在当我点击一个单元格时,样式没有被更新。当我在此之后单击另一个单元格时,前一个单元格的样式将被更新。我已经尝试了Refresh()Update的控制,但没有运气。

我怎么能解决这个问题,所以一个单元格的样式是立即更新,当它被点击?

DataGridViewCell's样式没有及时更新

您可以使用这些事件在单击或按下键时绘制当前单元格:

Private Sub DataGridView1_CellClick(sender As Object, e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellClick
    'put here your code to add CurrentCell to maze array
    Me.PaintCurrentCell()
End Sub
Private Sub DataGridView1_KeyDown(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles DataGridView1.KeyDown
    If e.KeyCode = Keys.Space Then Me.PaintCurrentCell()
End Sub
Private Sub DataGridView1_SelectionChanged(sender As Object, e As System.EventArgs) Handles DataGridView1.SelectionChanged
    Me.DataGridView1.CurrentCell.Style.SelectionBackColor = Me.DataGridView1.CurrentCell.Style.BackColor
End Sub
Private Sub PaintCurrentCell()
    Me.DataGridView1.CurrentCell.Style.BackColor = Color.Black
    Me.DataGridView1.CurrentCell.Style.SelectionBackColor = Color.Black
End Sub

当您单击单元格时,会调用cellformatting事件。你离开手机的时候再打一次。这就是为什么点击后它会更新。要对所有单元格强制使用cellformatingevent,可以调用以下命令:

DataGridView1.Invalidate()