在编辑datagridview单元格时;用鼠标点击任意位置

时间:2015-04-17 14:11:07

标签: c# datagridviewtextboxcell

我试图找出如何编辑数据网格视图单元格,其行为类似于常规文本框。目前,当我单击单元格时,光标位于文本的开头,并显示:

dgvVX130.BeginEdit(false);
((TextBox)dgvVX130.EditingControl).SelectionStart = 0;  

然后我可以用键进行编辑,并可以用左右箭头移动光标位置。

此外,我希望能够在单元格中选择一部分文本然后复制或删除。目前,鼠标选择似乎完全无法使用。

如何用鼠标更改光标位置? 如何用鼠标选择部分文本?

1 个答案:

答案 0 :(得分:0)

也许第一个例子会有所帮助。进入单元格编辑模式时,它会从单击的鼠标位置中选择3个字符:

private void dataGridView1_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
    if (dataGridView1.EditingControl == null)
    {
        dataGridView1.BeginEdit(false);
        TextBox editor = (TextBox)dataGridView1.EditingControl;
        // insert checks for null here if needed!!
        int ms = editor.GetCharIndexFromPosition(e.Location);
        editor.SelectionStart = ms;
        editor.SelectionLength = Math.Min(3, editor.Text.Length - editor.SelectionStart);
    }
}

请注意,代码仅在我们尚未处于编辑模式时执行!这可能是你的代码失败的地方..

更新:由于您似乎希望用户选择启动编辑模式并在第一次按下鼠标时设置选择,这里有一段代码可以帮我完成。

它对Lambda编辑控件和临时TextBox使用了一点Timer,但也可以在没有Lambda的情况下编写。{{1因为Timer事件保持捕获鼠标直到事件完成,即使在释放MouseDown之后也需要,因此阻止了单元格进入编辑模式。

请注意,所有进一步的错误检查都留给您,尤其是编辑器控件,对于受保护的单元格和非文本单元格,它将为null。

Capture