有什么方法可以在文本粘贴到RichTextBox时检测到或导致事件触发?或者也许已经有某种事件在粘贴文本时触发了?顺便说一下,这是Winforms C#。
答案 0 :(得分:5)
因为并非所有人都可以使用Ctrl + V,并且因为还有其他方法可以将文本放入文本框(例如拖放),所以我采用了不同的路线,我将在此分享以防其他人正在寻找寻求解决方案。
我所做的是在班上创建一个字段:
int _lastPosition = 0;
并在TextChanged()事件中添加了以下内容:
if (SelectionStart - _lastPosition > 2)
{
// Text was pasted into text box
}
_lastPosition = SelectionStart;
我假设如果一次在文本框中输入超过2个字符,那么必须粘贴文本,因为有人可以一次输入超过2个字符吗?无论如何,这对我有用。感谢所有试图提供帮助的人。
答案 1 :(得分:0)
我无论如何都不是C#专家,事实上我触摸语言已有3年了!但是,您可能希望使用ProcessCmdKey方法来侦听CTRL + V
。
http://msdn.microsoft.com/en-us/library/system.windows.forms.control.processcmdkey(v=vs.71).aspx
答案 2 :(得分:0)
Icemanminds的答案不能正常运行,这确实会在您粘贴时显示但有副作用。
如果执行此操作,您还将在文本中输入if块,并使用空文本框 1.粘贴至少两行文字 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;
}
答案 3 :(得分:0)
这是另一种类似的方法,用于检测是否发生了更改框中字符数的剪切或粘贴(它不会检测是否粘贴了与突出显示的字符数相同的字符数): 首先创建一个类级别成员来保持当前长度
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
}
}