为什么 KeyDown 事件不适用于 datagridview c#



我是c#的新手,使用Windows表单。

我正在寻找一个事件来与datagridview一起使用,当按下键盘中的向下箭头键时,我找到了 keyDown datagridview事件。

我想做的是:

假设我有 4 rows datagridview,现在当我按下箭头(在键盘中)时,我希望突出显示(选择)向下,同时选择一行时,我希望事件检查行字体颜色是否为红色,所以我使用了以下代码:

 private void dataGridView1_KeyDown(object sender, KeyEventArgs e)
 {
        int RowIndex = dataGridView1.SelectedRows[0].Index;

        if (dataGridView1.Rows[RowIndex].DefaultCellStyle.ForeColor == Color.Red)
        {
            MessageBox.Show("This row font is red");
        }               

 }

当我尝试此代码时,它不能很好地工作,问题是:

说:

Row0 font color = black

Row1 font color = red

Row2 font color = black

Row3 font color = black

现在所选行已Row0,向下按箭头将转到Row1但事件不会被触发。 现在所选行已Row1,当我按下箭头时,事件起作用但为时已晚,我的意思是当选择Row1时应该触发它。

有人知道我该如何解决它(或任何其他想法)吗?我只想在键盘中按箭头键时检查行字体颜色? 谢谢

KeyDown 事件在所选内容实际更改之前触发。

关键事件按以下顺序发生:

KeyDown
KeyPress
KeyUp

因此,一个简单的解决方案是将代码移动到 KeyUp 事件,该事件发生在新行选择发生

要实现此目的,您可以使用 SelectionChanged 事件首先使用以下行设置行选择模式

dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect;

那么这里是选择更改事件机制

private void dataGridView1_SelectionChanged(object sender, EventArgs e)
    {
        if (dataGridView1.SelectedRows.Count > 0)
        {
            int RowIndex = dataGridView1.SelectedRows[0].Index;
            if (dataGridView1.Rows[RowIndex].DefaultCellStyle.ForeColor == Color.Black)
            {
                MessageBox.Show("This row font is Black");
            }      
        }
    }

相关内容

最新更新