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

时间:2014-01-30 23:41:52

标签: 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);
    }
}

2 个答案:

答案 0 :(得分:6)

我遇到与OP完全相同的问题,需要一个稍有不同的解决方案。我需要DataGridViewSelectionMode.FullRowSelect而不是CellSelect。我通过以下方式实现了这一目标:

datagridview1.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
datagridview1.ClipboardCopyMode = DataGridViewClipboardCopyMode.Disable;
datagridview1.MultiSelect = false;

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

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

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

datagridview1.EditMode = DataGridViewEditMode.EditProgrammatically;
datagridview1.EnableHeadersVisualStyles = false;
datagridview1.RowHeadersVisible = false;

答案 1 :(得分:2)

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

dataGridView1.SelectionMode = DataGridViewSelectionMode.CellSelect;
dataGridView1.MultiSelect = false;