是否有一种方法可以在用户每次输入时以编程方式选择DataGridView单元格文本的特定部分?
例如,如果用户输入一个单元格并在其中输入 hello world
,然后重新输入同一单元格,则子字符串 world
将为自动选择(即无需用户操作)。
像这样:
答案 0 :(得分:3)
使用EditingControlShowing事件的可能解决方案。 DataGridViewEditingControlShowingEventArgs的 e.Control
成员引用当前单元格的“编辑控件”。
检查编辑控件的类型是否为DataGridViewTextBoxEditingControl后,将e.Control
强制转换为TextBoxBase类,该类提供了用于选择单元格文本的Select()方法。
我在选择部分Text之前引入了短暂的延迟,因为该事件在单元格无效之前引发。如果立即执行选择,则在单元格无效且之前的选择丢失之后,编辑控件将重新选择所有文本。
更新:
正如Reza Aghaei在评论中指出的那样,在这种情况下调用动作也将获得相同的结果(甚至更好)。
此方法选择文本的最后一个单词,如果只有一个单词,则选择所有文本。可以轻松调整以选择文本的任何其他部分。
示例功能:
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);
}));
}
}