|
Вопрос # 5 391/ вопрос решён / |
|
Доброго времени суток, уважаемые эксперты!
У меня на форме лежит Edit, у него в обработчике OnExit код проверки значений на соответствие определенным условиям. Так вот вопрос, перед выполнением расчетов я хочу программно вызвать этот метод. Я сделал так:
Edit1.onExit(Self);
Правильно ли я делаю?
 |
Вопрос задал: Sonic-X (статус: Посетитель)
Вопрос отправлен: 8 июня 2011, 22:27
Состояние вопроса: решён, ответов: 2.
|
Ответ #1. Отвечает эксперт: min@y™
Не совсем. Если обработчик - это метод формы, на которой лежит компонент, то вызов из другого метода этой формы - это:
Self.Edit1Exit(Edit1);
А вызов извне:
Form1.Edit1Exit(Form1.Edit1); // <--- это ОЧЕНЬ хреновый код, не делай так!
Но тут встаёт один неприятный вопрос: а нафига? Ведь, при переходе фокуса событие всё равно вызовется.
 |
Ответ отправил: min@y™ (статус: Доктор наук)
Время отправки: 8 июня 2011, 22:34
Оценка за ответ: 5
|
Ответ #2. Отвечает эксперт: Вадим К
Здравствуйте, Sonic-X!
Лучше написать, как будет правильнее. Для этого делаем процедуру (а она может быть методом формы, находиться в другом классе, в другом файле), которая проверяет содержимое поля. И вызываем ее с OnExit и с обработчика нажатия кнопки расчет. Почему так? Потому что если один код вызывается с двух и более мест - нужно оформлять его в отдельную процедуру/функцию. Во вторых, это дает дополнительную гибкость - в обработчике OnExit может выполняться ещё какой то специфический код, а в обработчике кнопки расчет - свой.
Собственно код приводить нет большого смысла, так как он и так понятен.
 |
Ответ отправил: Вадим К (статус: Академик)
Время отправки: 9 июня 2011, 00:53
Оценка за ответ: 5
|
Мини-форум вопроса
Всего сообщений: 1; последнее сообщение — 8 июня 2011, 22:47; участников в обсуждении: 1.
|
Sonic-X (статус: Посетитель), 8 июня 2011, 22:47 [#1]:
С Edit1 согласен плохой пример, это я для упрощения примера. Если рассматривать конкретно мой случай то у меня там DateTimePicker1, он неактивен, становится активным при CheckBox.Checked=True;. При чекнутом состоянии берется текущая дата и время, иногда дату не нужно изменять, тоесть текущая устраивает. На событии OnExit повешен код, который в текущей дате устанавливает время 23:23:59. Как я уже сказал выше иногда дата текущая устраивает и я установив галку жму на выборку результатов не передавая фокус контролу, тогда метод OnExit не вызовется. Вот потому я и при проверке всех вводимых данных хочу и вызвать программно метод OnExit.
|
10 июня 2011, 17:04: Статус вопроса изменён на решённый (изменил автор вопроса — Sonic-X): Вопрос решен.
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|