【问题标题】:Ctrl-C on DataGridView displays junk characters when pasting粘贴时 DataGridView 上的 Ctrl-C 显示垃圾字符
【发布时间】:2012-02-09 18:57:42
【问题描述】:

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

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

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 事件并将副本调用到剪贴板,它工作正常,但我不希望每次输入单元格时都复制到剪贴板。似乎问题直接与@987654333 @键。

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

有人遇到过这样的问题吗?有关如何解决它的任何建议?

【问题讨论】:

  • 所以您是说数据单元格的普通 Ctrl+C 以及 KeyDown+Clipboard.SetText 在该应用程序中出现混乱?
  • 是的,这就是我的意思。
  • 那么明显的问题是:当您将记事本复制到该内部应用程序时,它是否也会出现混乱?
  • 不,如果我将它添加到记事本,然后从记事本复制到内部应用程序,它工作正常。
  • 我会尝试以下操作:在您的应用程序中调用 Clipboard.SetText,向其传递一个固定字符串(而不是 CurrentCell.Value)和各种 TextDataFormat 值。如果可行,请尝试使用 CurrentCell 使用相同的格式。也许 CurrentCell.Value.ToString() 本身是混乱的?如果这不起作用,请从一个完全空白的项目中尝试 Clipboard.SetText;也许这与您当前的应用完全无关。

标签: c# winforms datagridview clipboard


【解决方案1】:

我的猜测是您的其他应用程序无法处理 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);

那就试试吧:

  1. 使用Ctrl+C 将单元格复制到剪贴板
  2. 点击上述按钮
  3. 将文本粘贴到您的其他应用程序中

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-30
    • 1970-01-01
    相关资源
    最近更新 更多