ChangingTextboxTextWithoutFiringTextChangedEvent我在C#中的应用程序有一个带有txt_TextChanged事件的文本框。privatevoidtxt_TextChanged(objectsender,EventArgse){//Dosomthin}但是有一个特定的部分我想在不触发txt_TextChanged事件的情况下更改txt.Text。txt.Text="somthing"//不要触发txt_TextChanged我该怎么做?没有直接的方法来防止为text属性引发事件,但事件处理程序可以使用标志来确定天气或不执行任务。这可能比附加和分离事件处理程序更有效。这可以通过页面中的变量或者甚至是带有变量的专用类包装器来完成:skipTextChange=true;txt.Text="某事";protectedvoidTextChangedHandler(objectsender,EventArgse){if(skipTextChange){返回;}///做一些事情}使用专用的事件处理程序包装器vareventProxy=newConditionalEventHandler(TextBox1_TextChanged);TextBox1.TextChanged=eventProxy.EventAction;eventProxy.RaiseEvents=false;TextBox1.Text="测试";publicvoidTextBox1_TextChanged(objectsender,EventArgse){//一些很酷的东西;}内部类ConditionalEventHadlerwhereTEventArgs:EventArgs{privateActionhandler;公共布尔RaiseEvents{get;设置;}publicConditionalEventHadler(Actionhandler){this.handler}publichandler;voidEventHanlder(objectsender,TEventArgse){if(!RaiseEvents){return;}this.handler(sender,e);您可以扩展文本框并在其中引入一个不会触发TextChanged事件的新属性。classSilentTextBox:TextBox{//如果为真,则不应抛出TextChanged事件privateboolSilent{get;放;}publicstringSilentText{set{Silent=true;文字=价值;沉默=假;}}protectedoverridevoidOnTextChanged(EventArgse){//仅当控件处于非静默状态时引发事件if(!Silent){base.OnTextChanged(e);}}}txt.TextChanged-=textBox1_TextChanged;//分离事件处理程序txt.Text="something";//更新值txt.TextChanged+=textBox1_TextChanged;//重新附加事件处理程序尝试这个扩展方法publicstaticclassTextBoxExt{privatestaticreadonlyFieldInfo_field;私有静态只读PropertyInfo_prop;staticTextBoxExt(){类型type=typeof(Control);_field=type.GetField("文本",BindingFlags.Instance|BindingFlags.NonPublic);_prop=type.GetProperty("WindowText",BindingFlags.Instance|BindingFlags.NonPublic);}publicstaticvoidSetText(thisTextBoxbox,stringtext){_field.SetValue(box,text);_prop.SetValue(box,text,null);您可以使用textbox.SetText("...")更改文本,它不会触发TextChanged事件快速而肮脏的方法是制作一个ctrl.Enable=false;ctrl.Text="某物";ctrl.Enable=true;然后在OnChange事件中,用a封装有问题的代码以上是C#学习教程:在不触发TextChanged事件的情况下更改文本框文本如果分享的内容对你有用,需要进一步了解C#学习教程,希望大家多加注意——if(ctrl.Enabled){//这里有违规代码。}publicpartialclassForm1:Form{publicForm1(){InitializeComponent();EventHandlerTextChanged_EventHandler=newEventHandler(textBox1_TextChanged);textBox1.TextChanged-=TextChanged_EventHandler;}privatevoidtextBox1_TextChanged(objectsender,EventArgse){MessageBox.Show("BUG}");不代表立场,如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
