2012-08-07 99 views
4

我需要檢測用戶是否將剪貼板中的文本粘貼到ToolStripTextBox中。因此我創建了一個從ToolStripTextBox繼承的自定義控件。然後我想重寫WndProc來捕獲WM_PASTE消息,但我注意到沒有WndProc來覆蓋。對於標準的TextBox,描述的方法工作正常。從ToolStripTextBox(C#)中的剪貼板中檢測粘貼

任何建議如何檢測從ToolStripTextBox上的剪貼板粘貼?

+0

你有沒有想過創建一個繼承標準TextBox並從ToolStripTextBox實現你想要的自定義控件? – seekerOfKnowledge 2012-08-07 12:45:19

回答

2

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類。

+0

非常感謝,這就是解決方案!完美的作品,正是我尋找的! – user1225775 2012-08-07 13:56:57

+0

謝謝:)完整的功勞歸功於原創作者。 – 2012-08-07 14:02:23

0

如果您在Windows [Windows窗體/ WPF]中,則可以使用剪貼板來檢測數據。

if (Clipboard.GetDataObject().GetDataPresent(DataFormats.Text)) 
      { 

      richTextBox1.Paste(); 
      MessageBox.Show("You have data in clipboard") 

      } 

(編輯,包括WPF)

+0

來源:我借用我的應用程序的代碼:http://code.google.com/p/nepaliwikipediatranslator/source/browse/trunk/NepaliWikiPediaTranslator/FormMainWindowFunctions.cs?spec=svn197&r=197 – Rajesh 2012-08-07 12:55:30

+0

只是爲了澄清:應用程序本身不必是WinForm應用程序,它可以是WPF或任何其他(控制檯等)。 '剪貼板'恰好在WinForms命名空間中。但是你仍然可以很好地在所有類型的應用程序中使用它。它所需要的只是添加對「System.Windows.Forms」的引用。同樣,您可以使用C#應用程序中的Microsoft VB庫。 – 2012-08-07 12:55:36

+2

是的,我使用Windows.Forms。我知道如何從剪貼板中檢索文本,但我真正想要的是檢測用戶何時嘗試從剪貼板粘貼文本。 – user1225775 2012-08-07 12:56:24

0

ToolStripTextBox是包含一個標準的文本框主機控制,你需要爲你所描述的事,但更換ToolStripTextBox.TextBox與文本框,不幸的是它是一個只讀屬性。

因此,您需要從ToolStripControlHost派生一個MyToolStripTextBox,以便能夠更改其託管的控件的類型。