我有一个datagrid,它的一列带有文本,我想允许用户复制文本。我已经设置了例程以复制整个单元格或行,但是在编辑单元格和键入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);
}
}
我的问题与OP完全相同,需要一个略有差异的解决方案。我需要DataGridViewSelectionMode.fullrowselect而不是CellSelect。我能够通过执行以下操作来实现这一目标:
datagridview1.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
datagridview1.ClipboardCopyMode = DataGridViewClipboardCopyMode.Disable;
datagridview1.MultiSelect = false;
我相信设置夹板copymode禁用会破坏内置的网格功能,而剩下的是标准的MS Windows行为。因此,我能够在可编辑的单元格中选择文本,然后输入Ctrl-C复制"仅"选定的文本。
- 或 - 自从首次发布以来,.NET版本之间存在行为变化。无论如何,使用Visual Studio 2013,.NET 4.5和Windows 7。
也要注意:我的情况我只关心能够复制/粘贴可编辑的列/单元。该解决方案实现了这一点。右键单击仍然有效。
其他可能对观众很重要的网格设置:
datagridview1.EditMode = DataGridViewEditMode.EditProgrammatically;
datagridview1.EnableHeadersVisualStyles = false;
datagridview1.RowHeadersVisible = false;
如果将SelectionMode
属性作为FullRowSelect
,则即使单元格处于编辑模式,它也会复制整个行。将值更改为CellSelect
。将以下属性设置为仅使用CTRL C。
dataGridView1.SelectionMode = DataGridViewSelectionMode.CellSelect;
dataGridView1.MultiSelect = false;