我創建了數字文本框並希望實現自定義複製/粘貼功能。由於全局快捷方式,文本框上的Ctrl + C不起作用
當重寫ProcessCmdKey,OnKeyDown或OnKeyPress時,由於使用相同組合定義的應用程序中存在快捷方式,因此未收到Ctrl + C。其他組合如Ctrl + U或任何接收到的。
這甚至可能嗎?怎麼樣?
我創建了數字文本框並希望實現自定義複製/粘貼功能。由於全局快捷方式,文本框上的Ctrl + C不起作用
當重寫ProcessCmdKey,OnKeyDown或OnKeyPress時,由於使用相同組合定義的應用程序中存在快捷方式,因此未收到Ctrl + C。其他組合如Ctrl + U或任何接收到的。
這甚至可能嗎?怎麼樣?
在這種情況下,你應該重寫
Control.OnPreviewKeyDown
和的情況下按Ctrl + C按下設置
PreviewKeyDownEventArgs.IsInputKey
到
true
。這樣做應該會導致
Control.OnKeyDown
被調用,儘管此組合鍵有全局快捷鍵。
更新:由於我的解決方案並不爲你工作,第三方庫顯然實現的IMessageFilter
這會導致在消息層面上處理的快捷方式。您可以嘗試添加另一個消息過濾器,然後在那裏進行自定義處理,但這會變得很難看......
將控件上的ShortcutsEnabled設置爲false。見TextBoxBase.ShortcutsEnabled。
正如弗洛裏安指出的那樣,消息在控制器內部以某種方式被吃掉了,並且由於你沒有直接訪問它,你將不得不變得聰明起來。
這個庫對你來說可能有些用處,但是你將不得不避免你的正常事件(比如OnPreviewKeyDown),並且使用lib中的那些來代替它。
http://www.codeproject.com/KB/cs/globalhook.aspx
然而,如果你想捕捉CTRL + C自己,用它做什麼,這是你可能希望避免的路線。用戶在碰到快捷方式時不會期望發生兩件事情,它們會在你後面出現。當然,我不知道你的應用如何或者做了什麼,這只是一個猜測。
菜單Ctrl + C爲應用程序相關任務打開自定義複製對話框。當然,每個用戶都希望文本框上的Ctrl + C可以複製選定的文本。我不認爲任何人會因爲做到這一點而追隨我:)。 – testalino 2011-05-09 13:05:03
對我來說,被解決的答案效果很好。實際上,我自己找到了解決方案並實現了它,但沒有去編譯測試,並決定尋找幫助,因爲IsInputKey是一個非常奇怪的名稱,表示您想要捕獲密鑰。
我的問題是如果我能夠捕捉快捷方式,即使全局快捷方式存在。我相信你的情況下,你沒有一個全局快捷鍵綁定到Ctrl + C,所以OnPreviewKeyDown在你的情況下被調用... – testalino 2012-07-30 07:11:18
這些其他「快捷方式」是如何實現的?這對你的問題起着重要的作用。 – 2011-05-06 12:40:21
我其實不能說。這是第三方GUI庫 – testalino 2011-05-06 12:57:41