6

ユーザーがテキストをコピーできるようにしたいテキストを含む1つの列を持つデータグリッドがあります。セルまたは行全体をコピーできるようにルーチンを設定しましたが、セルを編集して 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とまったく同じ問題を抱えていて、わずかな違いが1つある解決策が必要でした。CellSelectではなくDataGridViewSelectionMode.FullRowSelectが必要でした。私は次のことを行うことでこれを達成することができました:

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プロパティが asの場合FullRowSelect、セルが編集モードであっても行全体がコピーされます。値を に変更しますCellSelect。以下のプロパティを設定して、CTRL + C を使用して編集セルのコンテンツのみをコピーします。

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