我使用DataGridView从DataTable获取数据以编辑一些数据量。一切似乎都不错,但有一些不便之处。当用户开始编辑单元格时,该单元格的文本自动变为选中状态,光标移动到单元格文本的末尾。 当用户开始编辑单元格文本时,我想以编程方式将光标(插入符号)放在编辑单元格中文本的开头。 我试过了:
private void gridView_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
DataGridViewTextBoxEditingControl dText = (DataGridViewTextBoxEditingControl)e.Control;
dText.Select(0, 0);
}
这不行。我还尝试在CellBeginEdit中取消选择文本 - 也没有结果。
答案 0 :(得分:9)
我会期待你做的工作。但DataGridView是一个包含许多事件的复杂控件,通常它不能直观地工作。似乎当EditingControlShowing
事件发生时,控件尚未初始化,因此您无法对其进行初始化。当CellBeginEdit
事件发生时,控件甚至尚未创建。
应该有并且可能是更好的方法,但我使用CellEnter
事件让它工作:
private void dataGridView1_CellEnter(object sender, DataGridViewCellEventArgs e)
{
if (dgv.CurrentCell.EditType == typeof(DataGridViewTextBoxEditingControl))
{
dgv.BeginEdit(false);
((TextBox)dgv.EditingControl).SelectionStart = 0;
}
}
因此,当输入单元格时,我只是直接进入编辑模式,但我将 false 传递给BeginEdit()
,这告诉它不要选择任何文本。现在编辑控件已完全初始化,我可以将SelectionStart
设置为零,将光标移动到文本的开头。
如果单元格不是文本框,那么我什么都不做。
如果你想要,你可以做到
dgv.EditMode = DataGridViewEditMode.EditProgrammatically;
这样您就可以完全控制编辑开始的时间,但我发现这不是必需的。