DataGridViewCell编辑模式下的Ctrl + c复制整行

dav*_*ner 4 c# winforms datagridviewtextboxcell

我有一个数据网格,其中有一列文本,我希望允许用户复制文本.我已经设置了例程来复制整个单元格或行,但是在编辑单元格和键入CTRL + C时遇到问题.

这是我用来编辑单元格的代码.进入后,我可以突出显示文本并右键单击它进行复制.这很好用,如果我突出显示文本并键入CTRL + C然后复制行,而不是突出显示的文本.

我不想创建自己的类,如果不可能,我会保持原样.

private void dataGridView1_CellLeave(object sender, DataGridViewCellEventArgs e)
{
    if (dataGridView1.EditingControl == null ||
    dataGridView1.CurrentCell.EditType != typeof (DataGridViewTextBoxEditingControl))
    return;
    dataGridView1.CancelEdit();
    dataGridView1.EndEdit();
}

private void dataGridView1_CellEnter(object sender, DataGridViewCellEventArgs e)
{
    if (dataGridView1.CurrentCell.EditType == typeof(DataGridViewTextBoxEditingControl))
    {
    dataGridView1.BeginEdit(false);
    }
}
Run Code Online (Sandbox Code Playgroud)

Jim*_*edy 6

我遇到与OP完全相同的问题,需要一个稍有不同的解决方案.我需要DataGridViewSelectionMode.FullRowSelect而不是CellSelect.通过执行以下操作,我能够实现此目的:

datagridview1.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
datagridview1.ClipboardCopyMode = DataGridViewClipboardCopyMode.Disable;
datagridview1.MultiSelect = false;
Run Code Online (Sandbox Code Playgroud)

我相信设置ClipboardCopyMode禁用会破坏内置网格功能,剩下的就是标准的MS Windows行为.因此,我可以在可编辑单元格中选择文本并输入ctrl-C来"复制"所选文本.
- 或者 - 很可能.NET版本之间的行为发生了变化,因为这是第一次发布的.无论如何,这适用于我使用Visual Studio 2013,.NET 4.5和Windows 7.

同样重要的是要注意:我的情况我只关心能够复制/粘贴可编辑的列/单元格.该解决方案实现了这一点.右键单击仍然有效.

其他可能对观看者很重要的网格设置:

datagridview1.EditMode = DataGridViewEditMode.EditProgrammatically;
datagridview1.EnableHeadersVisualStyles = false;
datagridview1.RowHeadersVisible = false;
Run Code Online (Sandbox Code Playgroud)


Jun*_*ith 3

如果您拥有该SelectionMode属性,FullRowSelect那么即使单元格处于编辑模式,它也会复制整行。将值更改为CellSelect. 设置以下属性以使用 CTRL + C 仅复制编辑单元格内容。

dataGridView1.SelectionMode = DataGridViewSelectionMode.CellSelect;
dataGridView1.MultiSelect = false;
Run Code Online (Sandbox Code Playgroud)