为什么KeyDown事件不能与datagridview c#一起使用?

时间:2016-03-19 12:08:05

标签: c#

我是c#的新手并使用Windows窗体。

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

我想做的是:

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

 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时它会被触发。

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

2 个答案:

答案 0 :(得分:1)

{/ 3}}事件在选择实际发生变化之前触发

  

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

KeyDown

KeyPress

KeyUp

因此,一个简单的解决方案是将您的代码移至KeyUp事件,在新行选择发生后发生。

答案 1 :(得分:1)

要实现此目的,您可以使用 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");
            }      
        }
    }