Search code examples
c#textbox

Changing Textbox text without firing TextChanged event


My application in C# has a Textbox with a txt_TextChanged event.

private void txt_TextChanged(object sender, EventArgs e)
{
  //Do somthin
}

But there's one specific part that I want to change txt.Text without firing the txt_TextChanged event.

txt.Text ="somthing" //Don't fire txt_TextChanged

How can I do that?


Solution

  • There is no direct way to prevent the raising of events for the text property, however your event handler can use a flag to determine weather or not to perform a task. This i likely to be more efficient than attaching and detaching the event handler. This can be done by a variable within the page or even a specialized class wrapper

    With a variable:

    skipTextChange = true;
    txt.Text = "Something";
    
    protected void TextChangedHandler(object sender, EventArgs e) {
      if(skipTextChange){ return; }
      /// do some stuffl
    }
    

    With specialized event handler wrapper

       var eventProxy = new ConditionalEventHandler<EventArgs>(TextBox1_TextChanged);
        TextBox1.TextChanged = eventProxy.EventAction;
    
        eventProxy.RaiseEvents = false;
        TextBox1.Text = "test";
    
    
        public void TextBox1_TextChanged(object sender, EventArgs e) {
           // some cool stuff;
        }
    
        internal class ConditionalEventHadler<TEventArgs> where TEventArgs : EventArgs
    {
       private Action<object,TEventArgs> handler;
    
        public bool RaiseEvents {get; set;}
    
        public ConditionalEventHadler(Action<object, TEventArgs> handler)
        {
            this.handler = handler; 
        }
    
        public void EventHanlder(object sender, TEventArgs e) {
          if(!RaiseEvents) { return;}
          this.handler(sender, e);
        }
    }