Delphi - Запуск кода без отображения формы - PullRequest
2 голосов
/ 18 марта 2011

Что вы думаете об этой практике программирования: - Мне нужно выполнить одну транзакцию в первой форме, а затем заставить некоторые обновления, размещенные в другой форме (для каждого элемента, который отображается в другой форме). То есть это все равно что показать эту форму и нажать на какую-нибудь кнопку. Поскольку эти функции необходимо выполнять из второй формы, я подумал сделать это, не показывая вторую форму. Это хорошая практика программирования или у вас есть другие рекомендации?

Кроме того, достаточно просто установить свойство> Visible: = False до ShowModal для второй формы или мне нужно выполнить некоторые другие действия?

Ответы [ 2 ]

6 голосов
/ 18 марта 2011

Ну, необычно иметь форму, которую ты не показываешь. Обычно вы отделяете свою бизнес-логику от пользовательского интерфейса.

Чтобы ответить на ваш вопрос, я не думаю, что вам вообще нужно звонить в ShowModal. Просто определите метод в классе формы и вызовите его. В конечном итоге формы - это просто объекты Delphi, и вы можете использовать их как таковые. Если вы не хотите их показывать, не вызывайте ShowModal или Show.

2 голосов
/ 18 марта 2011

Второй вопрос первый: установка Visible := False бесполезна, поскольку смысл всех методов ShowXXX - сделать форму видимой.Как говорит Дэвид, вы можете выполнять действия, не вызывая Show вообще, при условии, что ваша форма не использует какой-либо код OnActivate или OnShow для правильного выполнения своей работы.

Что касаетсяесли это хорошая идея, я говорю нет !

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

Правильный подход

  • Ваша форма в настоящее время выполняет как минимум две разные вещи:
    • Визуальный контроль пользовательского интерфейса (назовите его A)
    • и «обязательные функции»(назовите это B)
  • Не имеет большого значения, выполняет ли B правила проверки, дополнительную обработку или что-то еще.
  • B - процесс, который не требуетвзаимодействие с пользователем.
  • Следовательно, вам необходимо:
    • Скопировать B в не-пользовательский интерфейс (либо простой модуль с пользовательским объектом или модулем данных).Назовите его B *
    • Измените форму для вызова B * вместо использования B.
    • Проверьте, что ваша форма все еще ведет себя правильно.
    • Удалить B
    • И теперь вы можете вместо этого использовать новую форму вызова B *.

Приведенный выше подход избавит вас от огромных головных болей в будущем.

...