1
我知道这个问题(或它的变体)已经拿出了几次。但到目前为止,我还没有找到适合我的解决方案。阻止Windows窗体DataGridView移动到下一行上按ENTER键
我正在写一个Windows使用包含一个DataGridView呈现雇员数据的只读集合作为一种荣耀选择列表中的C#用户控件形式。网格是只读的(在control_load上填充)并将FullRowSelect设置为选择方法。我希望用户能够通过双击鼠标或使用当前行上的Enter键来选择一个由订户在其他地方处理的行的Id值。
在分配我选择员工价值后处理KeyDown事件,我试图阻止选择移动到下一行。这个工作正常,除了当CurrentCell.RowIndex为零。 有谁知道我可以如何得到这个工作CurrentCell.Rowindex = 0?
private void dgvEmployees_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
if (dgvEmployees.CurrentRow.Cells[0].Value != null)
{
this.SelectedEmployeeId = (int) dgvEmployees.CurrentRow.Cells[0].Value;
this.OnEmployeeSelected(new TestEmployeeGridListEventArgs() {
SelectedEmployeeId = this.SelectedEmployeeId,
SelectedEmployeeIdentifier = dgvEmployees.CurrentRow.Cells["Identifier"].Value.ToString()
});
}
// Prevent pressing <enter key> moving onto the next row.
if (dgvEmployees.CurrentCell.RowIndex > 0)
{
dgvEmployees.CurrentCell = dgvEmployees[1, dgvEmployees.CurrentCell.RowIndex - 1];
dgvEmployees.CurrentRow.Selected = true;
}
else
{
dgvEmployees.CurrentCell = dgvEmployees[1, 0];
dgvEmployees.Rows[0].Cells[1].Selected = true;
}
}
}
你试过了'e.Handled = true;'还是'e.SuppressKeyPress'? – Reniuz 2014-09-29 09:52:40
我没有想到这一点。在else块中将e.Handled或SuppressKeyPress设置为true可以让我确切地找到我正在寻找的行为。非常感谢。 – 2014-09-29 10:04:31
你可以用它来代替所有'if'语句的代码块 – Reniuz 2014-09-29 10:07:05