粘贴时,DataGridView上的Ctrl-C会显示垃圾字符

时间:2012-02-09 18:57:43

标签: c# winforms datagridview clipboard

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

要复制到剪贴板的代码:

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

如果我使用此值并将其粘贴到任何其他应用中,且值正确。

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

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

我已尝试在KeyDown上创建一个DataGridView事件,该事件将验证它是一个已锁定的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());
}  

有没有人有这样的问题?有关如何修复它的任何建议吗?

1 个答案:

答案 0 :(得分:3)

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

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

修改:然后我的第二个猜测是DataGridView在按下Ctrl+C时以多种格式复制文字,而您的其他应用程序因格式的存在而变得混乱它不是在期待。

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

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

然后尝试:

  1. 使用Ctrl+C
  2. 将您的单元格复制到剪贴板
  3. 点击所述按钮
  4. 将文本粘贴到其他应用程序中
  5. 请勿在{{1​​}}事件处理程序中测试上述代码。