我有一个数据网格,其中有一列包含文本,我希望用户可以复制文本。我已经设置了例程来复制整个单元格或行,但是在编辑单元格和键入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);
}
}
答案 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;