我正在使用Windows窗体应用程序..
我有一个像这样的数据网格视图:
这里我在驱动程序ID列中我必须输入驱动程序ID。输入驱动器ID后,我将按Enter键。同时光标使用释放按钮移动到下一列,但我不想自动将光标移动到那里,我想将光标始终保持在驱动程序ID列中。
我如何实现这一目标?
答案 0 :(得分:3)
保持原样和用户datagridview单元结束编辑事件怎么样?
private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
if (dataGridView1.Columns[e.ColumnIndex].Name=="driverid")
{
dataGridView1.CurrentCell = dataGridView1.Rows[(e.RowIndex+1)].Cells["driverid"];
dataGridView1.BeginEdit(true);
}
}
这是否有效我没有测试,因为我没有数据可以测试
答案 1 :(得分:2)
我创建了一个简单的示例,因此您可以了解如何使用ProcessCmdKey事件并防止焦点光标在其他列上。我创建了自定义 datagridviewcontrol(MyGrid)并将该控件放在我的窗体中。
//Code added in form load.
MyGrid1.KeepCursorColumnIndex = 2; //I want to keep focus on column index 2
//MyGrid custom grid class
public partial class MyGrid : DataGridView
{
private int _freezCursorColumnIndex = -1;
public int KeepCursorColumnIndex
{
get
{
return _freezCursorColumnIndex;
}
set
{
_freezCursorColumnIndex = value;
}
}
public MyGrid()
{
InitializeComponent();
}
protected override bool ProcessCmdKey(ref System.Windows.Forms.Message msg, System.Windows.Forms.Keys keyData)
{
if (_freezCursorColumnIndex > -1 && this.CurrentRow != null && keyData == Keys.Return)
{
this.CurrentCell = this.CurrentRow.Cells[KeepCursorColumnIndex];
keyData = Keys.None;
}
return base.ProcessCmdKey(ref msg, keyData);
}
}
以上代码不是一个完整的例子。您需要在ProcessCmdKey代码中进行一些更改。例如,如果您将KeepCursorColumnIndex设置为3并且当前所选列索引为1,则按Enter键将光标直接移至索引3,如果列2,则另一个如果当前行索引为1st,则将更改为2nd存在。