0

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

在 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控制,但没有运气。

我该如何解决这个问题,以便单击单元格时立即更新单元格的样式?

4

2 回答 2

1

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

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
于 2016-11-16T10:38:16.307 回答
0

发生的情况是,当您单击单元格时,您调用了 cellformatting 事件。当你离开牢房时,你再次调用它。这就是为什么点击它后它会更新。要对所有单元格强制执行 CellFormattingEvent,您可以调用以下命令:

DataGridView1.Invalidate()
于 2016-11-17T11:36:41.107 回答