我需要檢測用戶是否將剪貼板中的文本粘貼到ToolStripTextBox中。因此我創建了一個從ToolStripTextBox繼承的自定義控件。然後我想重寫WndProc來捕獲WM_PASTE消息,但我注意到沒有WndProc來覆蓋。對於標準的TextBox,描述的方法工作正常。從ToolStripTextBox(C#)中的剪貼板中檢測粘貼
任何建議如何檢測從ToolStripTextBox上的剪貼板粘貼?
我需要檢測用戶是否將剪貼板中的文本粘貼到ToolStripTextBox中。因此我創建了一個從ToolStripTextBox繼承的自定義控件。然後我想重寫WndProc來捕獲WM_PASTE消息,但我注意到沒有WndProc來覆蓋。對於標準的TextBox,描述的方法工作正常。從ToolStripTextBox(C#)中的剪貼板中檢測粘貼
任何建議如何檢測從ToolStripTextBox上的剪貼板粘貼?
WndProc
in ToolStripTextBox
似乎遙不可及。我搜索了一下出於好奇和跨答案出來 - https://stackoverflow.com/a/4688745/168719
如果使用ToolStripControlHost
是不是一種選擇,仍然有需要的WndProc的自定義處理scenarioes其他聰明的解決方法:
http://bytes.com/topic/c-sharp/answers/279168-toolstriptextbox-right-click
Nicholas Paldino [.NET/C#MVP]
我剛剛注意到了。爲了解決這個問題,您可以通過調用TextBox屬性來獲取 託管的TextBox。然後,你應該是 能夠創建一個派生自NativeWindow的類,它覆蓋了 WndProc方法來忽略上下文菜單消息[或攔截WM_PASTE,顯然...] 當你獲得文本框屬性,獲取句柄,並將句柄分配給重寫的NativeWindow類。
非常感謝,這就是解決方案!完美的作品,正是我尋找的! – user1225775 2012-08-07 13:56:57
謝謝:)完整的功勞歸功於原創作者。 – 2012-08-07 14:02:23
如果您在Windows [Windows窗體/ WPF]中,則可以使用剪貼板來檢測數據。
if (Clipboard.GetDataObject().GetDataPresent(DataFormats.Text))
{
richTextBox1.Paste();
MessageBox.Show("You have data in clipboard")
}
(編輯,包括WPF)
來源:我借用我的應用程序的代碼:http://code.google.com/p/nepaliwikipediatranslator/source/browse/trunk/NepaliWikiPediaTranslator/FormMainWindowFunctions.cs?spec=svn197&r=197 – Rajesh 2012-08-07 12:55:30
只是爲了澄清:應用程序本身不必是WinForm應用程序,它可以是WPF或任何其他(控制檯等)。 '剪貼板'恰好在WinForms命名空間中。但是你仍然可以很好地在所有類型的應用程序中使用它。它所需要的只是添加對「System.Windows.Forms」的引用。同樣,您可以使用C#應用程序中的Microsoft VB庫。 – 2012-08-07 12:55:36
是的,我使用Windows.Forms。我知道如何從剪貼板中檢索文本,但我真正想要的是檢測用戶何時嘗試從剪貼板粘貼文本。 – user1225775 2012-08-07 12:56:24
ToolStripTextBox是包含一個標準的文本框主機控制,你需要爲你所描述的事,但更換ToolStripTextBox.TextBox與文本框,不幸的是它是一個只讀屬性。
因此,您需要從ToolStripControlHost派生一個MyToolStripTextBox,以便能夠更改其託管的控件的類型。
你有沒有想過創建一個繼承標準TextBox並從ToolStripTextBox實現你想要的自定義控件? – seekerOfKnowledge 2012-08-07 12:45:19