c# - 当用户开始编辑单元格文本时,如何以编程方式将光标放在文本的开头以编程方式编辑 DataGridView 单元格?

标签 c# text datagridview cell text-cursor

我使用从 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/

相关文章:

c# - 双色路径对象

regex - 在 MATLAB 中检查 UTF-8 字母是否为元音字母

iOS 发送带有位置对象的短信

c# - DataGridView 缺少数据源为空的新行

c# - 如何将属性转换为其名称?

c# - 在 VirtualBox 中运行时无法恢复 Firebird 数据库

c# - TFS Fakes 构建单元测试失败

css - 是否可以通过 CSS 为文本设置水平渐变? (左字母一种颜色,右 - 另一种颜色)

c# - 如何将 DataGridViewComboBoxCell 转换为 DataGridViewTextBoxCell

c# - 2 在 c# 中启用可编辑 DataGridViewComboBox(非数据绑定(bind))的问题