Второй вопрос первый: установка Visible := False
бесполезна, поскольку смысл всех методов ShowXXX - сделать форму видимой.Как говорит Дэвид, вы можете выполнять действия, не вызывая Show вообще, при условии, что ваша форма не использует какой-либо код OnActivate
или OnShow
для правильного выполнения своей работы.
Что касаетсяесли это хорошая идея, я говорю нет !
- Как я уже указывал, есть проблема, на которую вам следует обратить внимание.Т.е. в настоящее время (или даже из-за технического обслуживания в какой-то момент в будущем) ваша форма полагается на то, чтобы быть видимой, чтобы выполнять свою работу должным образом.
- Конечно, вы можете обойти эту проблему, позволяя форме мигать, ибыть программно закрытым.Очевидно, эстетически плохой выбор.
- Не говоря уже о проблемах, связанных с правильным решением.Вы закончите тем, что будете писать кучу патч-кода, чтобы обернуть форму, чтобы она могла делать то, что вам нужно, когда вам лучше сделать следующее ...
Правильный подход
- Ваша форма в настоящее время выполняет как минимум две разные вещи:
- Визуальный контроль пользовательского интерфейса (назовите его A)
- и «обязательные функции»(назовите это B)
- Не имеет большого значения, выполняет ли B правила проверки, дополнительную обработку или что-то еще.
- B - процесс, который не требуетвзаимодействие с пользователем.
- Следовательно, вам необходимо:
- Скопировать B в не-пользовательский интерфейс (либо простой модуль с пользовательским объектом или модулем данных).Назовите его B *
- Измените форму для вызова B * вместо использования B.
- Проверьте, что ваша форма все еще ведет себя правильно.
- Удалить B
- И теперь вы можете вместо этого использовать новую форму вызова B *.
Приведенный выше подход избавит вас от огромных головных болей в будущем.