当前位置: 首页 > 编程语言 > C#

改变TextBox中粘贴的内容分享

时间:2023-04-10 11:50:59 C#

ChangethePastedintheTextBoxContent如何动态改变TextBox中粘贴的内容。以下是我订阅事件的方式:DataObject.AddPastingHandler(uiTextBox,TextBoxPaste);以下是我如何定义事件处理程序:privatevoidTextBoxPaste(objectsender,DataObjectPastingEventArgsargs){RegexnonNumeric=newSystem.Text.RegularExpressions.Regex(@"D");字符串结果=nonNumeric.Replace(clipboard,String.Empty);//我不能在这里只执行“args.DataObject.SetData(结果)”。}我可以想到两种方法,这两种方法都不是很有吸引力:)两种方法都包含取消粘贴命令。第一种方法是取消粘贴命令,然后计算粘贴文本的内容,如果结果是粘贴的。privatevoidTextBoxPaste(objectsender,DataObjectPastingEventArgsargs){stringclipboard=args.DataObject.GetData(typeof(string))asstring;RegexnonNumeric=newSystem.Text.RegularExpressions.Regex(@"D");字符串结果=nonNumeric.Replace(clipboard,String.Empty);intstart=uiTextBox.SelectionStart;intlength=uiTextBox.SelectionLength;intcaret=uiTextBox.CaretIndex;字符串文本=uiTextBox.Text.Substring(0,开始);文本+=uiTextBox。Text.Substring(起始+长度);stringnewText=text.Substring(0,uiTextBox.CaretIndex)+结果;newText+=text.Substring(脱字符号);uiTextBox.Text=newText;uiTextBox.CaretIndex=插入符+result.Length;args.CancelCommand();另一种方法是取消粘贴命令,更改剪贴板中的文本,然后重新粘贴。这也需要您区分实际粘贴命令和手动调用粘贴命令。像这样的东西boolm_modifiedPaste=false;privatevoidTextBoxPaste(objectsender,DataObjectPastingEventArgsargs){if(m_modifiedPaste==false){m_modifiedPaste=true;字符串剪贴板=args.DataObject.GetData(typeof(string))作为字符串;RegexnonNumeric=newSystem.Text.RegularExpressions.Regex(@"D");字符串结果=nonNumeric.Replace(clipboard,String.Empty);args.CancelCommand();Clipboard.SetData(DataFormats.Text,结果);应用程序命令。粘贴.执行(结果,uiTextBox);}else{m_modifiedPaste=false;}}无法调用args.DataObject.SetData("somedata"),因为DataObject已冻结。您可以做的是完全替换DataObject:privatevoidTextBoxPaste(objectsender,DataObjectPastingEventArgse){stringtext=(String)e.DataObject.GetData(typeof(String));DataObjectd=newDataObject();d.SetData(DataFormats.Text,text.Replace(Environment.NewLine,""));e.DataObject=d;我经常使用VB.net,我测试了这个C#位,我使用了转换器,因为我很蹩脚:)stringoClipboard;privatevoidTextBox1_GotFocus(objectsender,System.EventArgse){oClipboard=Clipboard.GetText();剪贴板.SetText("foo");}privatevoidTextBox1_LostFocus(objectsender,System.EventArgse){Clipboard.SetText(oClipboard);当控件获得焦点时,我将剪贴板设置为新文本。它存储旧值。稍后,当控件失去焦点时,剪贴板将重置为旧值。只是对@Fredrik的代码进行了一些修改,因为我一直在尝试他的两种方法。第一个是缩小版privatevoidTextBox_Pasting(objectsender,DataObjectPastingEventArgse){stringclipboard=e.DataObject.GetData(typeof(string))asstring;RegexnonNumeric=newSystem.Text.RegularExpressions.Regex(@"D");字符串结果=nonNumeric.Replace(clipboard,string.Empty);intcaret=CaretIndex;Text=Text.Substring(0,SelectionStart)+result+Text.Substring(SelectionStart+SelectionLength);CaretIndex=caret+result.Length;e.CancelCommand();}并保持剪切贴板内容更新另一个私有字符串oldClipboardContent{get;放;}=“”;privateboolpasteModified{得到;放;}=假;privatevoidTextBox_Pasting(objectsender,DataObjectPastingEventArgse){if(pasteModified){pasteModified=false;}else{pasteModified=true;字符串文本=(字符串)e.DataObject.GetData(typeof(string));旧剪贴板内容=文本;RegexnonNumeric=newSystem.Text.RegularExpressions.Regex(@"D");text=nonNumeric.Replace(text,string.Empty);e.CancelCommand();Clipboard.SetData(DataFormats.Text,文本);ApplicationCommands.Paste.Execute(text,this);Clipboard.SetData(DataFormats.Text,OldClipboardContent);旧剪贴板内容="";我在我的自定义TextBox控件中使用那些,这就是为什么我可以在不先写名称的情况下访问TextBox属性的原因以上是C#学习教程:更改文本框中的粘贴内容所有内容分享,如果它对你有用所有,需要了解更多关于C#学习教程的,希望大家注意——本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: