Member 12573955 Ответов: 3

Текстовое поле запирает использовать событие textchanged


Я использую Visual Studio 2015, webform, C#
У меня есть текстовое поле, в которое пользователь вводит числовое значение, после чего он запускает следующий код


protected void txtAsset_TextChanged(object sender, EventArgs e)
    {
        lblSuccessful.Text = string.Empty;
        txtAsset.Focus();
        string input = txtAsset.Text;
        if (!Regex.IsMatch(input, @"^[0-9]\d*"))
        {
            lblSuccessful.CssClass = "ErrorMessage";
            lblSuccessful.Text = "You have input invalid criteria";
            txtAsset.Text = string.Empty;
            txtAsset.Focus();
        }
        else
        {
          Execute Retrieval of record
        }


Однако он отлично работает, когда пользователь вводит другое число, иногда вы можете ввести его в текстовое поле, в других случаях оно блокируется, вы не можете удалить значение или ввести что-либо.

Включена автоматическая обратная связь.

Любая помощь будет оценена по достоинству

Что я уже пробовал:

Я удалил проверку, и она все еще происходит, это ошибка Microsoft

Karthik_Mahalingam

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

3 Ответов

Рейтинг:
1

Graeme_Grant

Установите точку останова в начале кода внутри события и пройдите через код. Вы увидите, что именно происходит.

Если вы не знакомы с отладчиком, вот видео, которое поможет вам быстро начать работу: Базовая отладка с помощью Visual Studio 2010-YouTube[^]

А вот как исправить исключение StackOverflow:

private bool isChanging;

protected void txtAsset_TextChanged(object sender, EventArgs e)
{
    // are we in the middle of chaning the txtAsset.Text property?
    // Yes, don't process the change that the code is in the middle
    //      of changing
    if (isChanging) return;
    
    // No? Okay, set the falg and make the change...
    isChanging = true;

    lblSuccessful.Text = string.Empty;
    txtAsset.Focus();
    string input = txtAsset.Text;
    if (!Regex.IsMatch(input, @"^[0-9]\d*"))
    {
        lblSuccessful.CssClass = "ErrorMessage";
        lblSuccessful.Text = "You have input invalid criteria";
        
        // this next line fires the txtAsset.TextChanged event...
        txtAsset.Text = string.Empty;
        
        txtAsset.Focus();
    }
    else
    {
      Execute Retrieval of record
    }
    
    //We are all done...
    isChanging = false;
}


Рейтинг:
0

OriginalGriff

Посмотрите на свой код: каждый раз, когда текстовое свойство Txtasset TextBox изменяется, вы получаете событие TextChanged. А что вы делаете внутри мероприятия? Измените свойство Text того же текстового поля. Что приводит к запуску другого события. Что изменяет текст, что вызывает событие, что ... вы получаете картину. Уберите изменения в текстовое поле, и ваша проблема исчезнет.


Рейтинг:
0

Member 12573955

Привет , большое спасибо за ваш ответ, я не понимаю вас.

Мое событие срабатывает только при выводе табуляции из текстового поля, если проверка проходит успешно, оно вводит код для извлечения записи из базы данных, удаляет большую часть кода и удаляет проверку, и это все еще вызывает проблемы.