2012-02-09 95 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