當文本粘貼到RichTextBox中時,是否有某種方式可以檢測或導致事件觸發?或者,當文本被粘貼時,可能已經有某種事件觸發了?順便說一下,這是Winforms C#。檢測粘貼到RichTextBox中
回答
因爲不是所有的人都可以使用Ctrl + V,並因爲有其他的方式來獲取文本到文本框(如拖放),我走了不同的路線,我將在這裏分享以防其他人正在尋找解決方案。
我所做的就是在我的課創建一個字段:
int _lastPosition = 0;
,並在框TextChanged()事件中,我增加了以下內容:
if (SelectionStart - _lastPosition > 2)
{
// Text was pasted into text box
}
_lastPosition = SelectionStart;
我的假設下,去,如果有更多然後2個字符一次輸入到文本框中,然後必須粘貼文本,因爲一次可以輸入多於2個字符的其他方法還能如何?無論如何,這對我有用。感謝所有嘗試提供幫助的人。
我不是任何C#專家,事實上,自從我觸及語言後已經3年了!但是,您可能希望使用ProcessCmdKey方法來偵聽CTRL + V
。
http://msdn.microsoft.com/en-us/library/system.windows.forms.control.processcmdkey(v=vs.71).aspx
Icemanminds的回答無法正常工作,這會在粘貼時顯示,但有副作用。
如果你這樣做的話,你還將在文本框中輸入if block 012ff1.粘貼至少兩行文字 2.用箭頭鍵,按空格鍵然後退格鍵回到頂端行 3.用箭頭鍵回到底線並按回車鍵 當它沒有發生時,您現在被通知粘貼。
編輯:這是針對該問題的補丁
代碼:
protected override void OnSelectionChanged(EventArgs e)
{
base.OnSelectionChanged(e);
int cavetOffset = SelectionStart - m_nLastCavetPos;
int sizeOffset = Text.Length - m_nLastKnownSize;
if (sizeOffset > 0)
{
if (sizeOffset == 1)
Console.WriteLine("Typed \"" + (Text.Substring(SelectionStart - cavetOffset, sizeOffset)) + "\" At Position " + (SelectionStart - cavetOffset));
else if (sizeOffset > 1)
Console.WriteLine("Pasted \"" + (Text.Substring(SelectionStart - cavetOffset, sizeOffset)) + "\" At Position " + (SelectionStart - cavetOffset));
}
else if (sizeOffset == 0)
{
Console.WriteLine("Moved Caret to " + SelectionStart + " From " + m_nLastCavetPos);
}
else
{
if (sizeOffset == -1)
Console.WriteLine("Backspaced at " + (SelectionStart - cavetOffset));
if (sizeOffset < -1)
Console.WriteLine("HiliteDelete at " + ((SelectionStart - cavetOffset)+-sizeOffset) + " deleted " + (-sizeOffset) + " characters");
}
m_nLastKnownSize = Text.Length;
m_nLastCavetPos = SelectionStart;
}
我會研究這一點,但我很着迷,你是如何找到這個bug哈哈。 – Icemanind
看到我的帖子編輯,我有點做同樣的事情。我必須看到粘貼發生的時間。我剛剛結束粘貼,這樣我打破了它...愚蠢的運氣? – AnotherUser
此外,我的解決方案如上所述不適用於刪除和插入按鈕... – AnotherUser
這裏是另一個類似的方法來檢測剪切或粘貼已發生改變框中的字符數(它不檢測是否相同的字符數的被粘貼爲被高亮顯示): 首先創建一個類層次部件保持當前長度
private int _LastTextLength = 0;
現在標記,當用戶輸入框長度:
private void txtNoteDetails_Enter(object sender, EventArgs e)
{
_LastTextLength = txtNoteDetails.Text.Length;
}
然後使用TextChanged事件:
private void txtNoteDetails_TextChanged(object sender, EventArgs e)
{
if (Math.Abs(txtNoteDetails.Text.Length - _LastTextLength) > 2)
{
//Do your thing
}
}
- 1. c#RichTextbox粘貼方法
- 2. 在NSTextField上檢測粘貼
- 3. 如何檢測在WPF應用程序的RichTextBox中編寫或粘貼的URL
- 4. 在文本框中檢測粘貼 - vb.net
- 5. 在輸入框中檢測粘貼
- 6. 無法將圖像從剪貼板粘貼到RichTextBox
- 7. 用ctrl + v檢測粘貼文本或右鍵 - >粘貼
- 8. 從ToolStripTextBox(C#)中的剪貼板中檢測粘貼
- 9. RichTextBox粘貼限於32k字符?
- 10. WP7芒果RichTextBox支持複製粘貼
- 11. 處理Silverlight 4 RichTextBox粘貼事件
- 12. 粘貼字體粘貼到剪貼板
- 13. PHP複製 - 粘貼檢測器
- 14. 檢測iOS 8 Quicktype建議粘貼
- 15. Excel檢測粘貼特殊操作
- 16. 如何攔截(檢測)粘貼命令到TMemo中?
- 17. 我的RichTextBox的剪切/複製/粘貼不剪切,複製或粘貼
- 18. 我可以將RTF文本從RichTextBox粘貼到WebBrowser控件嗎?
- 19. 如何將文本以純文本的形式粘貼到RichTextBox
- 20. 右鍵點擊鼠標粘貼到一個richtextbox vC++ windows窗體
- 21. 是否可以檢測剪貼板粘貼?
- 22. 檢測RichTextBox中的圖像
- 23. 當UITextField獲取字符串粘貼時檢測到
- 24. Java剪貼板粘貼檢查器?
- 25. 無法粘貼到MacVim中
- 26. 將HTML粘貼到IE8中
- 27. 將ID粘貼到href中
- 28. C#WPF將在richtextbox中粘貼的BitmapImage轉換爲二進制
- 29. 如何覆蓋richtextbox中的複製和粘貼
- 30. 在RichTextBox中撤消不會撤消粘貼文本
+1 - 良好的解決方案。 – keyboardP
+1,但爲什麼檢查超過2個字符而不是超過1個字符(即,如果有人不粘貼2個字符,怎麼辦?)。 –
@StephenSwensen例如一個回車 – pungggi