2013-10-14 70 views
-1

我有一個事件在我的DataGridView將數據複製到剪貼板,但我的事件沒有檢測按Ctrl +ç正確(我必須按Ctrl + C約15次,使此事件檢測Ctrl + C按)。按Ctrl + C不會在Windows正常工作窗體應用程序

下面是代碼:

private void DataGridView_KeyUp(object sender, KeyEventArgs e) 
    { 
     if (e.KeyData == (Keys.Control | Keys.C)) 
     { 
      DataObject d = DataGridView.GetClipboardContent(); 
      Clipboard.SetDataObject(d); 
      e.Handled = true; 
     } 
    } 

爲什麼會這樣?

截圖時,我按下Ctrl鍵+ç

Enter image description here

+0

當你說它*沒有檢測到*,你是立足關閉的事實,你已經有了一個破發點的地方,你是試圖調試它?或者你在沒有調試器的情況下運行它,它*沒有檢測到它?* –

+0

適用於我工作正常 –

+0

我運行時沒有調試器,它按第十次運行 –

回答

4

你的畫面'鏡頭顯示您檢測到Ctrl鍵被釋放。當然不是你想要的。

你不能用KeyUp事件來做,DataGridView已經爲自己的使用攔截了Ctrl + C。做邏輯事情,將選定的單元格,列或行復制到剪貼板。確保它沒有做你需要它做的事情。

如果你想覆蓋它,那麼你需要保持領先的DGV。這就要求您從DataGridView中派生自己的類並重寫ProcessCmdKey()方法。一類添加到項目中,使它看起來像這樣:

using System; 
using System.Windows.Forms; 

class MyDataGridView : DataGridView { 
    protected override bool ProcessCmdKey(ref Message msg, Keys keyData) { 
     if (keyData == (Keys.Control | Keys.C)) { 
      // Do stuff 
      //.. 
      return true; 
     } 
     return base.ProcessCmdKey(ref msg, keyData); 
    } 
} 
+0

但爲什麼我的DGV不會將選定的單元格複製到剪貼板,如果它有自己的方法?或者我如何讓我的dgw做到這一點? –

+0

@ Greag.Deay我試過了,看起來像'Cell copy function'默認啓用了,爲什麼你不能看到它的工作? –

+0

@KingKing'ClipboardCopyMode = EnableWithoutHeaderText',它不會通過ctrl + c複製到剪貼板。 :( –

2

如果你把你的斷點在if情況,那麼你將在打了很多與錯誤的信息會發生什麼。除非您在同一時間按CtrlC

我使用這段代碼捕獲按Ctrl +Ç(檢查ModifierKeys):

private void DataGridView_KeyUp(object sender, KeyEventArgs e) 
{ 
if (e.Key == Key.C && 
    (Keyboard.Modifiers & ModifierKeys.Control) == (ModifierKeys.Control)) 
{ 
    DataObject d = DataGridView.GetClipboardContent(); 
    Clipboard.SetDataObject(d); 
    e.Handled = true; 
    } 
} 

因爲它是框架2.0:

private void DataGridView_KeyUp(object sender, KeyEventArgs e) 
{ 
if (e.Key == Key.C && (Control.ModifierKeys & Keys.Shift) == Keys.Shift) 
{ 
    DataObject d = DataGridView.GetClipboardContent(); 
    Clipboard.SetDataObject(d); 
    e.Handled = true; 
    } 
} 
+1

沒有這樣的屬性'e.Key' –

+0

在'KeyEventArgs e'上你可以找到它..編輯我的問題來反映整個方法。 –

+0

我無法找到對windows.input的引用。寫在框架2.0順便說一句。 –

相關問題