Моделируйте событие onCreate для фрейма Delphi
-
28-09-2019 - |
Вопрос
Я разрабатываю фрейм Delphi, и мне нужно вначале загрузить список бизнес-объектов в элемент управления grid.Фреймы Delphi не имеют события onCreate, так каков наилучший способ воспроизвести это?Должен ли я переопределить конструктор, как это предлагается на О нас?Должен ли я просто сделать публичное заявление loadData()
процедура и чтобы родительский контейнер вызывал ее, когда она будет готова к созданию?
Я хочу убедиться, что все дочерние элементы управления загружены и готовы к работе, прежде чем заполнять их данными, и я не знаком с иерархией создания компонентов Delphi.
Решение
Я бы не стал привязывать заполнение данных к созданию.Вы могли бы разумно создать фрейм и сохранить его, но изменить содержимое, которое он отображает позже.если вы заполните onCreate
затем вы должны освободить и воссоздать файл заново, чтобы получить свежие данные.Итак, имея LoadData()
это лучший подход.
В зависимости от сложности приложения и количества имеющихся у вас форм и фреймов может оказаться удобным, чтобы все ваши фреймы наследовались от общего базового фрейма.Затем вы могли бы ввести виртуальный LoadData
метод в базовом и переопределяемый в подклассах frame.
В качестве альтернативы, вы также могли бы спроектировать интерфейс и заставить фреймы реализовать его.Если все сделано правильно, это позволит вам равномерно обрабатывать формы, рамы или даже панели и т.д.
Трудно дать вам более конкретный совет, так как это зависит от сложности графического интерфейса пользователя и приложения.В общем, всегда полезно иметь как можно меньше логики / кода в формах / фреймах.Таким образом, введение какого-то класса FormManager, который обрабатывает регистрацию и отображение форм / фреймов, может помочь изолировать это поведение в одном месте.Но если это небольшое, простое приложение, вам может сойти с рук простое выполнение его в формах.
Другие советы
Обычно я бы выбрал один из двух разных подходов:
- Переопределенный конструктор, принимающий какой-то объект, который либо содержит все элементы, либо знает, как их получить (напримерсчетчик)
- Свойство с настройщиком для объекта того же типа
Таким образом, логика получения объектов может быть спрятана где-нибудь в другом месте.
(Возможно, это то, что вы уже делаете, но название "loadData" заставляет меня поверить, что ваша fame на самом деле собирается загружать данные из какого-то хранилища, а не просто отображать данные, которые кто-то другой ранее извлек ...)