2011-05-06 19 views
2

我創建了數字文本框並希望實現自定義複製/粘貼功能。由於全局快捷方式,文本框上的Ctrl + C不起作用

當重寫ProcessCmdKey,OnKeyDown或OnKeyPress時,由於使用相同組合定義的應用程序中存在快捷方式,因此未收到Ctrl + C。其他組合如Ctrl + U或任何接收到的。

這甚至可能嗎?怎麼樣?

+0

這些其他「快捷方式」是如何實現的?這對你的問題起着重要的作用。 – 2011-05-06 12:40:21

+0

我其實不能說。這是第三方GUI庫 – testalino 2011-05-06 12:57:41

回答

3

在這種情況下,你應該重寫 Control.OnPreviewKeyDown和的情況下按Ctrl + C按下設置 PreviewKeyDownEventArgs.IsInputKeytrue。這樣做應該會導致 Control.OnKeyDown被調用,儘管此組合鍵有全局快捷鍵。

更新:由於我的解決方案並不爲你工作,第三方庫顯然實現的IMessageFilter這會導致在消息層面上處理的快捷方式。您可以嘗試添加另一個消息過濾器,然後在那裏進行自定義處理,但這會變得很難看......

+0

這不適合我。 OnPreviewKeyDown不爲Control + C調用。但它被稱爲Ctrl + M – testalino 2011-05-06 13:03:30

+0

感謝您的解釋。我不認爲我會這樣做,但它仍然是很好的知道。 – testalino 2011-05-09 13:06:00

1

正如弗洛裏安指出的那樣,消息在控制器內部以某種方式被吃掉了,並且由於你沒有直接訪問它,你將不得不變得聰明起來。

這個庫對你來說可能有些用處,但是你將不得不避免你的正常事件(比如OnPreviewKeyDown),並且使用lib中的那些來代替它。

http://www.codeproject.com/KB/cs/globalhook.aspx

然而,如果你想捕捉CTRL + C自己,用它做什麼,這是你可能希望避免的路線。用戶在碰到快捷方式時不會期望發生兩件事情,它們會在你後面出現。當然,我不知道你的應用如何或者做了什麼,這只是一個猜測。

+0

菜單Ctrl + C爲應用程序相關任務打開自定義複製對話框。當然,每個用戶都希望文本框上的Ctrl + C可以複製選定的文本。我不認爲任何人會因爲做到這一點而追隨我:)。 – testalino 2011-05-09 13:05:03

0

對我來說,被解決的答案效果很好。實際上,我自己找到了解決方案並實現了它,但沒有去編譯測試,並決定尋找幫助,因爲IsInputKey是一個非常奇怪的名稱,表示您想要捕獲密鑰。

+1

我的問題是如果我能夠捕捉快捷方式,即使全局快捷方式存在。我相信你的情況下,你沒有一個全局快捷鍵綁定到Ctrl + C,所以OnPreviewKeyDown在你的情況下被調用... – testalino 2012-07-30 07:11:18

相關問題