从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());
}
有没有人有这样的问题?有关如何修复它的任何建议吗?
答案 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);
然后尝试:
Ctrl+C
请勿在{{1}}事件处理程序中测试上述代码。