当文本粘贴到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