Окно сообщений появляется дважды, и очистка текстового поля с помощью клавиши «возврат» приводит к ошибке - PullRequest
0 голосов
/ 08 мая 2018

Спасибо, что уделили мне время на чтение.

Моя проблема в том, что, если я использую texbox.Clear();, окно сообщений будет отображаться 2 раза.

Вот мой код:

private void textBox3_TextChanged(object sender, EventArgs e)
{
    int val = 0;
    bool res = Int32.TryParse(textBox3.Text, out val);
    if (res == true && val > -1 && val < 101)
    {
        // add record
    }
    else
    {
        textBox3.Clear();
        MessageBox.Show("Please input 0 to 100 only.");
        return;
    }
} 

И

если я использую это:

if (textBox3.Text == "")
{
    MessageBox.Show("Vul aub iets in", "Lege invoer",
    MessageBoxButtons.OK, MessageBoxIcon.Warning);
}

Тогда я получу ошибку System.FormatException для использования этого straal = int.Parse(textBox3.Text);

ТАКЖЕ

Когда я нахожусь в текстовом поле, и я ввожу число и вводу Backspace, появляется предупреждение.

1 Ответ

0 голосов
/ 08 мая 2018

Ваша проблема textBox3.Clear(). Если текст есть, он снова запускает событие TextChanged.

Я бы посоветовал вам использовать событие Validate вместо события TextChanged. Таким образом, вы не проверяете значение до тех пор, пока пользователь не выйдет из текстового поля и не изменит значение в обработчике событий, событие не будет запущено снова

* Исправление - я должен был сказать «Подтверждение события».

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

private void textBox3_Validating(object sender, CancelEventArgs e)
{
    int val = 0;
    bool res = Int32.TryParse(textBox3.Text, out val);
    if (res == true && val > -1 && val < 101)
    {
        // add record
        e.Cancel = false;
    }
    else
    {
        textBox3.Clear();
        e.Cancel = true;
        MessageBox.Show("Please input 0 to 100 only.");
    }
}

Если вам нужна помощь в назначении обработчика событий, вы можете легко назначить обработчик и создать заглушку кода, найдя правильное событие в списке событий в сетке свойств и дважды щелкнув по нему. Просто скопируйте содержимое этого метода в новый.

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

Чтобы удалить существующий, удалите имя метода, сохраненное с этим событием, в списке событий, а затем, при необходимости, удалите сам код.

Чтобы избавиться от дополнительных срабатываний обработчика событий, вместо очистки сбросьте для текстового поля допустимое значение по умолчанию (textBox3.Text = "0").

На заметку. Рассматривали ли вы вместо этого элемент управления NumericUpDown?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...