我试图实现在向上和向下箭头上触发的GlobalKeyPress事件,然后在DGV中更改所选行 - 简单,对吧?
但以下行并未更改所选行:
dgvArtikli.Rows [index ++] .Selected = true;
捕获的是什么?必须要有一些我不了解的财产或某些东西......
private void RegistarMainForm_KeyDown(object sender, KeyEventArgs e)
{
if(e.KeyCode == Keys.Down)
{
MoveDown();
}
else if (e.KeyCode == Keys.Up)
{
MoveUp();
}
}
private void MoveUp()
{
if (dgvArtikli.RowCount > 0)
{
if (dgvArtikli.SelectedRows.Count > 0)
{
int index = dgvArtikli.SelectedRows[0].Index;
dgvArtikli.Rows[index--].Selected = true;
}
}
}
private void MoveDown()
{
if (dgvArtikli.RowCount > 0)
{
if (dgvArtikli.SelectedRows.Count > 0)
{
int index = dgvArtikli.SelectedRows[0].Index;
dgvArtikli.Rows[index++].Selected = true;
}
}
}
答案 0 :(得分:1)
您正在再次选择所选行,然后增加或减少索引:
您可以使用++index
和--index
来解决此问题。此外,您需要对最后一行++
或第一行--
进行更好的验证。
作为更好的解决方案,即使ProcessCmdKey
不包含,您也可以使用DataGridView
来捕获箭头键↑或↓对焦。
然后,您可以使用表单的BindingContext
属性,找到DataGridView
的绑定上下文,并增加或减少Position
属性。 Position
属性负责处理有效的位置范围。
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if (keyData == Keys.Up)
{
BindingContext[dataGridView1.DataSource, dataGridView1.DataMember].Position -= 1;
return true;
}
if (keyData == Keys.Down)
{
BindingContext[dataGridView1.DataSource, dataGridView1.DataMember].Position += 1;
return true;
}
return base.ProcessCmdKey(ref msg, keyData);
}