2012-02-09 96 views
2

DataGridView复制单元格数据时遇到了一个奇怪的问题。我有一个ContextMenuStrip,其中包含复制特定字段的选项。当他们从菜单中选择此选项时,值的复制/粘贴完全按照应有的顺序进行。DataGridView上的Ctrl-C粘贴时会显示垃圾字符

我的代码复制到剪贴板:

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

如果我拿这个值,并将其粘贴到任何其他应用程序和值是正确的。

如果我在DataGridView中选择一个单元格并使用键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()); 
} 

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

+0

所以你是说在数据单元格中的Ctrl + C以及'KeyDown' +'Clipboard.SetText'出现在应用程序中混乱? – 2012-02-09 19:06:10

+0

是的,这就是我所说的。 – Taryn 2012-02-09 19:07:16

+0

那么显而易见的问题是:当你复制_from_ notepad _into_这个内部应用程序时,它是否也混乱了? – 2012-02-09 19:12:56

回答

2

我的猜测是你的其他应用程序无法处理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. 在其它应用粘贴文本

不要请在您的DataGridView_KeyDown事件处理程序(尚)中测试上述代码。

+0

我已经试过了,它仍然显得混乱。 – Taryn 2012-02-09 19:58:14