单击时部分选择DataGridView单元格的文本

时间:2019-02-19 22:54:53

标签: c# .net windows winforms datagridview

是否有一种方法可以在用户每次输入时以编程方式选择DataGridView单元格文本的特定部分?
例如,如果用户输入一个单元格并在其中输入 hello world ,然后重新输入同一单元格,则子字符串 world 将为自动选择(即无需用户操作)。

像这样:

enter image description here

1 个答案:

答案 0 :(得分:3)

使用EditingControlShowing事件的可能解决方案。 DataGridViewEditingControlShowingEventArgs e.Control 成员引用当前单元格的“编辑控件”。
检查编辑控件的类型是否为DataGridViewTextBoxEditingControl后,将e.Control强制转换为TextBoxBase类,该类提供了用于选择单元格文本的Select()方法。

我在选择部分Text之前引入了短暂的延迟,因为该事件在单元格无效之前引发。如果立即执行选择,则在单元格无效且之前的选择丢失之后,编辑控件将重新选择所有文本。

更新
正如Reza Aghaei在评论中指出的那样,在这种情况下调用动作也将获得相同的结果(甚至更好)。

此方法选择文本的最后一个单词,如果只有一个单词,则选择所有文本。可以轻松调整以选择文本的任何其他部分。

示例功能:

DataGridView EditingControlShowing

private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
    if (!(e.Control is DataGridViewTextBoxEditingControl)) return;

    TextBoxBase editControl = (TextBoxBase)e.Control;
    var cellText = editControl.Text;
    if (cellText?.Length > 1)
    {
        BeginInvoke(new Action(() => {
            string word = cellText.Split().Last();
            editControl.Select(cellText.Length - word.Length, word.Length);
        }));
    }
}