6

我有一个数据网格,其中有一列包含文本,我希望允许用户从中复制文本。我已经设置了能够复制整个单元格或行的例程,但是在编辑单元格并键入 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);
    }
}
4

2 回答 2

10

我遇到了与 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;
于 2016-04-20T13:27:31.893 回答
3

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

dataGridView1.SelectionMode = DataGridViewSelectionMode.CellSelect;
dataGridView1.MultiSelect = false;
于 2014-01-31T08:50:26.100 回答