我使用从 DataTable 获取数据的 DataGridView 来编辑一些数据。一切似乎都很好,但有一些不便。当用户开始编辑单元格时,该单元格的文本自动变为选中状态,光标移动到单元格文本的末尾。 当用户开始编辑单元格文本时,我想以编程方式将光标(插入符号)放在编辑单元格中文本的开头。 我试过:
private void gridView_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
DataGridViewTextBoxEditingControl dText = (DataGridViewTextBoxEditingControl)e.Control;
dText.Select(0, 0);
}
那是行不通的。我还尝试在 CellBeginEdit 中取消选择文本 - 也没有结果。
最佳答案
我原以为你所做的也会奏效。但是 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;
这样您就可以完全控制何时开始编辑,但我认为这不是必需的。
关于c# - 当用户开始编辑单元格文本时,如何以编程方式将光标放在文本的开头以编程方式编辑 DataGridView 单元格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8493625/