Событие проверки метки не запускается

Я хочу использовать событие Validating на этикетке в VB.Net (Visual Studio 2005, .Net Runtime 2.0).

У меня есть два текстовых поля рядом. Они предназначены для разделения% /% распределения, такого как 80/20, 50/50 и т. д. Итак, у меня есть проверка для каждого поля, чтобы гарантировать, что их значения> = 0 и <= 100. Я хочу, чтобы метка слева от текстовых полей имеет собственную проверку, которая гарантирует, что два значения текстовых полей составляют ровно 100.

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

Проблема в том, что, несмотря на установку CausesValidation = True в элементах управления Label, их события Validating не срабатывают. Даже ручной вызов Me.ValidateChildren () на уровне формы не вызовет событие для меток.

Есть идеи?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
1 726
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Могу я спросить, это веб-проект или проект формы?

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

Обратите внимание на событие «текст изменен», я думаю, вы неправильно понимаете использование проверки в случае элементов управления.

В методе, который обрабатывает событие «текст изменен» для tb1, вы можете поместить код, который при редактировании значения изменения в tb2 дополняет 100, и наоборот, редактирование tb2 вызовет автоматическое изменение в tb1. Вы также можете добавить в этот обработчик событий реакцию на неправильные значения.

заботиться

Я знаю, что есть 50 способов сделать это. Я использую встроенную проверку в CLR. Таким образом, у меня есть проверка для каждого элемента управления вводом, такого как текстовые поля. Чтобы использовать это, вы размещаете код в событии Validating. Это не «неправильно», и «текст изменен» - не то место, где я могу делать то, что я хочу.

Pittsburgh DBA 16.11.2008 23:01

Соответственно, я хочу разместить логику проверки на этикетке, которая находится рядом с двумя элементами управления, о которых я написал. Однако, несмотря на наличие всех свойств и событий, связанных с проверкой, событие Validating не запускается для меток даже при вызове Me.ValidateChildren () в форме.

Pittsburgh DBA 16.11.2008 23:02

Согласно документации для CausesValidation:

«Получает или задает значение, указывающее, вызывает ли элемент управления проверку, которая должна выполняться для любых элементов управления, требующих проверки при получении фокуса».

В моем собственном тестировании мне пришлось специально вызвать Label.Focus (), а затем выйти из этого поля (или вызвать другой control.Focus ()), чтобы событие сработало.

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

Ответ принят как подходящий

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

ваша ситуация не редкость, у вас есть проверка на уровне поля, которая говорит «положительное целое число», и бизнес-правило, которое гласит, что сумма значений A и B должна равняться 100%.

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

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

Другие вопросы по теме