Asitha
Asitha

Reputation: 13

Detect if a TextChanged event wasn't triggered programmatically

I have a TextChanged event attached to a TextBox in a Windows Form. How to make sure if a particular call to that event wasn't triggered programmatically rather by user interacting with the TextBox?

Upvotes: 0

Views: 640

Answers (3)

Ammar Ameerdeen
Ammar Ameerdeen

Reputation: 969

I would like to extend @rw_'s solution a little. Inside your TextBox event handler,

private void txt_TextChanged(object sender, EventArgs e)
{
             if (!(sender is null) &&((TextBox)sender).ContainsFocus)
                {
                    //Code if triggered by Click event
                }
                else
                {
                    //Code if triggered programmatically
                }
}

This will help your program adjust to the case where sender object is not null for some reason.

Upvotes: 2

RogerMKE
RogerMKE

Reputation: 737

This is a common problem. You can set a flag on your form before updating the value and then check it in your event handler:

handleEvent = false;
TextBox1.Text = "foo";
handleEvent = true;

Then in your handler, check the flag:

private void TextBox1_TextChanged(object sender, EventArgs e)
{
    if(handleEvent)
    {
        // do stuff
    }
}

Upvotes: 0

richardsonwtr
richardsonwtr

Reputation: 158

I am unsure about what your question means. I'll split my answer.

  1. If you want to call the text changed function programmatically and differ when it was called by user interactivity or if it was called programmatically:

    Assuming that when you call the function programmatically you pass null on sender and event args

    txt_TextChanged(null,null);
    , you could use this solution:

    private void txt_TextChanged(object sender, EventArgs e)
    {
        if(sender == null)
        {
            // triggered programmatically
        }
        else
        {
           // triggered by the user. sender object is the textbox interacted by the user
        } 
    }
    
  2. If you want to change the text programmatically without triggering the event:

    this.txt.TextChanged -= new System.EventHandler(this.txt_TextChanged);
    txt.Text = "bar";
    this.txt.TextChanged += new System.EventHandler(this.txt_TextChanged);
    

Upvotes: 1

Related Questions