| 
| 
 | Вопрос # 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): Вопрос решен. Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |