Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Использование полей экземпляра класса для хранения контактных данных в MDI формах на Delphi

Delphi , Программа и Интерфейс , MDI приложения

При работе с многодокументочным интерфейсом (MDI) в среде разработки Delphi может возникнуть проблема, когда переменные, используемые в различных экземплярах формы, принимают значения из последнего созданного объекта. Это происходит из-за того, что переменные объявлены как глобальные, и при создании новых экземпляров формы они не инициализируются отдельно для каждого объекта. В данной статье мы рассмотрим, как решить эту проблему, используя поля экземпляра класса.

Проблема с глобальными переменными

В коде ниже переменные ModuleUserLevel, ContactId, ContactTypeId и другие объявлены как глобальные, что приводит к тому, что при открытии нескольких копий формы MDI, данные, связанные с контактами, не сохраняют свою индивидуальность и изменяются для всех форм одновременно.

implementation
uses DataModule, MainForm;
{$R *.dfm}
var
  ModuleUserLevel, ContactId, ContactTypeId: Integer;
  EditMode, EditAccess, AddAccess, DeleteAccess: Boolean;
  ContactName: String;
constructor TContactDetailsFrm.Create(AOwner: TComponent; InContactTypeId, InContactId: Integer);
begin
  Inherited Create(AOwner);
  ContactId := InContactId;
  ContactTypeId := InContactTypeId;
end;

Решение проблемы с использованием полей экземпляра класса

Чтобы избежать проблемы с глобальными переменными, следует использовать поля экземпляра класса TContactDetailsFrm. В Delphi принято использовать префикс F для обозначения приватных полей класса.

type
  TContactDetailsFrm = class(TForm)
  private
    FModuleUserLevel, FContactId, FContactTypeId: Integer;
    FEditMode, FEditAccess, FAddAccess, FDeleteAccess: Boolean;
    FContactName: string;
  public
    // Общедоступные объявления
  end;

При таком подходе каждая форма будет иметь собственные копии переменных, и изменения в одной форме не будут затрагивать другие.

Пример использования полей экземпляра

В конструкторе формы TContactDetailsFrm теперь можно инициализировать поля экземпляра класса следующим образом:

constructor TContactDetailsFrm.Create(AOwner: TComponent; InContactTypeId, InContactId: Integer);
begin
  Inherited Create(AOwner);
  FContactId := InContactId;
  FContactTypeId := InContactTypeId;
end;

Теперь, при создании новой формы, переменные FContactId и FContactTypeId будут инициализированы отдельно для каждого экземпляра, и их значения не будут изменяться для других форм MDI, что решает поставленную задачу.

Создано по материалам из источника по ссылке.

Проблема связана с использованием глобальных переменных в многодокументочном интерфейсе (MDI) в Delphi, из-за чего данные не сохраняют индивидуальность между различными формами, и предлагается решение с использованием полей экземпляра класса для хранения


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: MDI приложения ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-03-15 08:01:11/0.0062119960784912/0