Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 5 391

/ вопрос решён /

Доброго времени суток, уважаемые эксперты!
У меня на форме лежит Edit, у него в обработчике OnExit код проверки значений на соответствие определенным условиям. Так вот вопрос, перед выполнением расчетов я хочу программно вызвать этот метод. Я сделал так:

 Edit1.onExit(Self);

Правильно ли я делаю?

Sonic-X Вопрос решён, но можно продолжить его обсуждение в мини-форуме

Вопрос задал: 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

Sonic-X (статус: Посетитель), 8 июня 2011, 22:47 [#1]:

С Edit1 согласен плохой пример, это я для упрощения примера. Если рассматривать конкретно мой случай то у меня там DateTimePicker1, он неактивен, становится активным при CheckBox.Checked=True;. При чекнутом состоянии берется текущая дата и время, иногда дату не нужно изменять, тоесть текущая устраивает. На событии OnExit повешен код, который в текущей дате устанавливает время 23:23:59. Как я уже сказал выше иногда дата текущая устраивает и я установив галку жму на выборку результатов не передавая фокус контролу, тогда метод OnExit не вызовется. Вот потому я и при проверке всех вводимых данных хочу и вызвать программно метод OnExit.

10 июня 2011, 17:04: Статус вопроса изменён на решённый (изменил автор вопроса — Sonic-X): Вопрос решен.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:45
Выполнено за 0.03 сек.