Определить, если событие TextChanged не было запущено программно - PullRequest
0 голосов
/ 26 июня 2018

У меня есть событие TextChanged, прикрепленное к TextBox в форме Windows. Как убедиться, что конкретный вызов этого события не был вызван программно, а пользователь взаимодействовал с TextBox?

Ответы [ 3 ]

0 голосов
/ 28 июня 2018

Это распространенная проблема.Вы можете установить флаг в своей форме перед обновлением значения, а затем проверить его в своем обработчике событий:

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

Затем в своем обработчике проверьте флаг:

private void TextBox1_TextChanged(object sender, EventArgs e)
{
    if(handleEvent)
    {
        // do stuff
    }
}
0 голосов
/ 28 июня 2018

Я бы хотел немного расширить решение @ rw_. Внутри вашего TextBox обработчика событий,

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
                }
}

Это поможет вашей программе приспособиться к случаю, когда sender объект не равен нулю по какой-то причине.

0 голосов
/ 26 июня 2018

Я не уверен, что означает ваш вопрос. Я разделю свой ответ.

  1. Если вы хотите, чтобы вызываемый текст изменял функцию программно и отличался, когда он вызывался из-за интерактивности пользователя или если он вызывался программно:

    Предполагая, что когда вы вызываете функцию программно, вы передаете пустое значение в аргументы отправителя и события

    txt_TextChanged(null,null);
    , вы можете использовать это решение:
    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. Если вы хотите изменить текст программно, не вызывая событие:

    this.txt.TextChanged -= new System.EventHandler(this.txt_TextChanged);
    txt.Text = "bar";
    this.txt.TextChanged += new System.EventHandler(this.txt_TextChanged);
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...