【问题标题】:How to place cursor to the start of the text in editing DataGridView cell programmatically when user start to edit cell text?当用户开始编辑单元格文本时,如何将光标放在以编程方式编辑 DataGridView 单元格的文本开头?
【发布时间】:2012-01-19 14:04:55
【问题描述】:

我使用从 DataTable 获取数据的 DataGridView 来编辑一些数据。一切似乎都很好,但有些不便。当用户开始编辑单元格时,该单元格的文本自动被选中,光标移动到单元格文本的末尾。 当用户开始编辑单元格文本时,我想将光标(插入符号)放在以编程方式编辑单元格的文本开头。 我试过了:

private void gridView_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
    {
        DataGridViewTextBoxEditingControl dText = (DataGridViewTextBoxEditingControl)e.Control;
        dText.Select(0, 0);
    }

那是行不通的。我也尝试在 CellBeginEdit 中取消选择文本 - 也没有结果。

【问题讨论】:

    标签: c# text datagridview cell text-cursor


    【解决方案1】:

    我早就料到你所做的工作也会如此。但是 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;
    

    这样您就可以完全控制何时开始编辑,但我认为这不是必需的。

    【讨论】:

    • 我在一些空引用异常之后添加了一个小改进:Private Sub dataGridView1_CellEnter(sender As Object, e As DataGridViewCellEventArgs) Handles Dgv.CellEnter If Dgv.CurrentCell.EditType = GetType(DataGridViewTextBoxEditingControl) Then DgGradeText.BeginEdit(False) Dim EditBox = DirectCast(Dgv.EditingControl, TextBox) If IsNothing(EditBox) = False Then EditBox.SelectionStart = 0 End If End Sub
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多