Управление таймером C # - хорошая практика? - PullRequest
0 голосов
/ 01 декабря 2011

Я создаю приложение, в котором в основном много пользовательского ввода, текстовых полей, полей со списком и т. Д. Я столкнулся с проблемой, связанной с проверкой ввода, и в основном я решил вызвать метод (который проверяет ввод в текстовое поле) внутри метод timer.tick.

Метод:

    private void AllowCreate()
    {
        if (firstNameText.Text == String.Empty || lastNameText.Text == String.Empty
             || descriptionText.Text == String.Empty)
        {
            createButton.Enabled = false;
        }
        else
        {
            createButton.Enabled = true;
        }
    }

Таким образом, каждый тик, метод вызывается и проверяет, являются ли текстовые поля пустыми.

Мой вопрос: является ли использование таймера таким способом, хорошей практикой? Если нет, есть ли более эффективные способы выполнения того, что я пытаюсь сделать? Спасибо.

Ответы [ 6 ]

4 голосов
/ 01 декабря 2011

Я бы не использовал этот метод.
Я всегда ловлю событие TextChanged для TextBoxes и SelectedIndexChanged для ComboBox и оттуда процедуру проверки вызова, включая или отключая кнопку.

В основном, еслиВы отправляете все события на

private void Something_Changed(object sender, EventArgs e)
{
    createButton.Enabled = 
        !String.IsNullOrEmpty(firstNameText.Text) &&
        !String.IsNullOrEmpty(lastNameText.Text) &&
        !String.IsNullOrEmpty(descriptionText.Text);
}

, которые вы сделали.

3 голосов
/ 01 декабря 2011

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

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

Если вы хотите выполнить всю проверку в одном месте, это тоже нормально, просто используйте один большой метод "CheckValidation ()" и вызывайте его из каждого события TextChanged или везде, где вы чувствуете необходимость повторной проверки.

2 голосов
/ 01 декабря 2011

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

http://msdn.microsoft.com/en-us/library/system.windows.forms.control.textchanged.aspx

1 голос
/ 01 декабря 2011

Если вы на самом деле не проводите какую-либо конкретную проверку, лучше переместить ваш текущий код в обработчик событий createButton click, и если они пусты, всплывет сообщение.

Если поля пусты,не приступать к выполнению кода и уведомлять пользователя, а не проверять его по таймеру (пользователь может пить кофе :))

1 голос
/ 01 декабря 2011

Это неправильный способ, потому что он будет проверять ввод без необходимости

Вы должны либо

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

    или

  • проверить после изменения значения текстового или комбинированного поля

0 голосов
/ 01 декабря 2011

У нас есть различные требования, чтобы использовать стиль таймера функциональности. Однако мы избегали компонента таймера. Вместо этого мы используем Quartz Server. Quartz.NET - это полнофункциональная система планирования заданий с открытым исходным кодом, которую можно использовать от самых маленьких приложений до крупных корпоративных систем.

Quartz - действительно мощная библиотека, но для простых требований API-интерфейс Timer может сэкономить время, избавив вас от ненужных сложностей в системе. Вам следует подумать об использовании API-интерфейса Timer в тех случаях, когда у вас не так много задач, которые нужно запланировать, и когда время их выполнения хорошо известно (и не изменяется) в процессе проектирования. В этих ситуациях вам не нужно беспокоиться о том, что некоторые задачи потеряны из-за остановки или сбоя. Для более сложных задач Quartz - это элегантное решение для планирования.

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