我是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");
}
}
}