C #: нажмите (где это применимо) против события проверки - PullRequest
0 голосов
/ 01 июля 2011

Я недавно работаю над формами окон с визуальным C #, и у меня есть куча переключателей, сгруппированных вместе.

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

Итак, у меня есть два метода:

public void doSomeStuff()

public bool valRadioButton1()

Я могу вызвать doSomeStuff () в событии click, а последний - в событии проверки радиокнопки, но я также могу просто вызвать оба в любом щелчке.событие или проверяющее событие.

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

Ответы [ 2 ]

0 голосов
/ 01 июля 2011

Радиокнопки странные в сочетании с обычной проверкой. Кажется, что событие проверки предназначено для того, чтобы вы могли проверять значение один раз, когда пользователь заканчивает ввод значения, а не каждый раз, когда значение изменяется, когда пользователь вводит его. Это имеет смысл для текстового поля, в котором вы хотите посмотреть завершенный текст, а не после каждого символа, который вводит пользователь. Но это немного более неясно для радио кнопок. На самом деле, я думаю, что вам следует избегать события проверки радио-кнопок и вместо этого использовать событие проверки контейнера (переключатели всегда должны быть во встроенном контейнере). Это позволяет пользователю клавиатуры выбирать / перемещаться по различным параметрам, чтобы получить тот, который им нужен, без повторных проверок при перемещении по параметрам. Затем, когда они перемещают фокус из поля группы (или любого контейнера, который вы использовали), вы можете проверить всю группу параметров одновременно. Это поведение более согласуется с проверкой других элементов управления. На самом деле я не вижу особой цели в использовании проверяющего события на отдельных переключателях. Единственная причина, которую я вижу, - это если вы хотите отменить новый выбор пользователя, не вызывая дополнительных событий щелчка. Но имейте в виду, что когда не выбрана ни одна радиокнопка и пользователь впервые нажимает на нее, событие проверки не произойдет! Переключатель не потерял фокус, и события проверки происходят только тогда, когда элемент управления теряет фокус. Вот почему я думаю, что вы должны просто избегать события проверки на переключателях и просто использовать событие проверки контейнера или событие щелчка переключателя.

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

Редактировать: Вы задали конкретный вопрос о том, когда происходит одно событие, а не другое. Я бы добавил эту информацию в ответ на это:

  1. Validate будет вызываться без вызова click, если код является причиной изменения выбранной радиокнопки, при условии, что фокус переходит на радиокнопку (или контейнер, если вы используете событие проверки контейнера).
  2. Клик будет вызываться без (или я должен был сказать раньше) вызова validate, если не была выбрана ни одна радиокнопка, и пользователь нажимает одну из них (validate происходит только тогда, когда элемент управления теряет фокус). В конечном счете, для выбранной опции в конечном итоге произойдет проверка.
  3. Click будет вызываться без (или я должен был сказать раньше) вызова validate, если ваш обработчик validate не связан с конкретной опцией, которая была ранее выбрана, или с ее контейнером. Он будет вызываться для параметра, который теперь выбран (и контейнера), когда этот параметр (или контейнер) теряет фокус.
  4. Click может быть вызван без вызова validate, если ваш код, который просматривает значение, не требует, чтобы выбранный параметр терял фокус, прежде чем смотреть на него.
0 голосов
/ 01 июля 2011

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

Я бы использовал проверяющее событие, чтобы оценить, является ли что-то действительным. Даже если вы знаете, что «никогда не может быть иного».

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