c# – DataGridView上的Ctrl-C在粘贴时显示垃圾字符

从DataGridView复制单元格数据时遇到了一个奇怪的问题.我有一个ContextMenuStrip,它包含一个复制特定字段的选项.当他们从菜单中选择此选项时,值将完全按照原样复制/粘贴.

我要复制到剪贴板的代码:

public static void CopyToClipboard(string value)
{
   Clipboard.Clear();
   Clipboard.SetText(value);
}

如果我取这个值并将其粘贴到任何其他应用程序中,并且值是正确的.

如果我在DataGridView中选择一个单元格并使用Keys Ctrl-C复制到剪贴板,我的问题就会发挥作用.复制到剪贴板的值在word,notepad,excel中正确显示,但我们有一个内部应用程序,我们尝试将值粘贴到它,它变成了混乱的字符.

复制的值为12345678,其他应用程序的结果变为-§-ý-:pC | yV-k²-û

我试图在DataGridView上创建一个KeyDown事件,它将验证它是一个键控的Ctrl-C,然后将我的副本调用到剪贴板代码,但值也会发生同样的事情.

private void DataGridView_KeyDown(object sender, KeyEventArgs e)
{
   if (e.Control && e.KeyCode == Keys.C)   
      CopyToClipboard(DataGridView2.CurrentCell.Value.ToString());
}

如果我使用CellEnter事件并将副本调用到剪贴板,它工作正常,但我不希望每次输入单元格时都不复制到剪贴板..似乎问题直接与Ctrl-C键.

private void DataGridView_CellEnter(object sender, DataGridViewCellEventArgs e)
{
    CopyAccountToClipboard(DataGridView2.CurrentCell.Value.ToString());
}  

有没有人有这样的问题?有关如何解决它的任何建议?

解决方法:

我的猜测是你的其他应用程序无法处理Unicode.尝试更改您的方法以ANSI格式设置文本:

public static void CopyToClipboard(string value)
{
   Clipboard.Clear();
   Clipboard.SetText(value, TextDataFormat.Text);
}

编辑:然后我的第二个猜测是,当按下Ctrl C时,DataGridView会以多种格式复制文本,而您的其他应用程序由于存在不期望的格式而变得混乱.

您可以尝试在表单中添加一个按钮,在单击时执行以下逻辑吗?

string text = Clipboard.GetText(TextDataFormat.Text);
Clipboard.Clear();
Clipboard.SetText(text, TextDataFormat.Text);

然后尝试:

>使用Ctrl C将单元格复制到剪贴板
>单击所述按钮
>将文本粘贴到其他应用程序中

不要在DataGridView_KeyDown事件处理程序中测试上面的代码.

上一篇:从网站复制部分之后的Javascript剪贴板操作


下一篇:浏览器中js复制问题