Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
[ÇÖZÜLDÜ - SOLVED] Owner - Parent Form nasıl kullanılmalı?
#1
Merhaba,

Elimde 2 adet form var. Bunlardan bir tanesi diğeri üzerinden açılıyor. Açılan alt form duruma göre Ana formdaki bazı rutinlerini çalıştırıyor. Fakat Ana Form kapatmış olabilir.

Ben alt formdan Ana formun hala kullanılabilir yaşayan bir form ise bu rutini çağırmak istiyorum. Aksi durumda olmayan bir nesne içindeki rutini çağırmış olacağım ve hata alacağım.

Formları dinamik olarak create ediyorum. Herhangi bir değişkende instance tutmuyorum. Açılan her form kendisini biliyor ve varsa Owner ve ParentForm bilgisini biliyor.

Anlatmak adına basit kod örneği aşağıdadır.

unit uFormAna;//main form unit

interface

uses
 Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
 System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs,
 Vcl.StdCtrls, Unit3;

type
 TFormAna = class(TForm)
   Button1: TButton;
   procedure Button1Click(Sender: TObject);
   procedure FormClose(Sender: TObject; var Action: TCloseAction);
 public
   procedure Msg();
 end;

implementation

{$R *.dfm}

procedure TFormAna.Button1Click(Sender: TObject);
begin
 TFormAlt.Create(nil, Self).Show;  //create child form and show
end;

procedure TFormAna.FormClose(Sender: TObject; var Action: TCloseAction);
begin
 Action := caFree; //destroy main form
end;

procedure TFormAna.Msg;
begin
 ShowMessage('Message from Main Form');  //show message in main form
end;

end.
unit uFormAlt;  //child form unit

interface

uses
 Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
 System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs;

type
 TFormAlt = class(TForm)
   procedure FormDestroy(Sender: TObject);
   procedure FormClose(Sender: TObject; var Action: TCloseAction);
 public
   FParentForm: TForm;

   constructor Create(AOwner: TComponent; AParentForm: TForm); reintroduce; overload; virtual;
 end;

implementation

uses uFormAna;

{$R *.dfm}

constructor TFormAlt.Create(AOwner: TComponent; AParentForm: TForm);
begin
 inherited Create(AOwner);
 FParentForm := AParentForm;  //main form value
end;

procedure TFormAlt.FormClose(Sender: TObject; var Action: TCloseAction);
begin
 Action := caFree;  //destroy child form
end;

procedure TFormAlt.FormDestroy(Sender: TObject);
begin
 if Assigned(FParentForm) then  //if main form is useable call msg routine
   TFormAna(FParentForm).Msg;
end;

end.
PostgreSQL - Linux - Delphi, Poliüretan
WWW
Cevapla


Bu Konudaki Yorumlar
[ÇÖZÜLDÜ - SOLVED] Owner - Parent Form nasıl kullanılmalı? - Yazar: 3ddark - 04-06-2020, Saat: 09:33
Owner - Parent Form nasıl kullanılmalı? - Yazar: 3ddark - 04-06-2020, Saat: 10:47
Owner - Parent Form nasıl kullanılmalı? - Yazar: esistem - 04-06-2020, Saat: 11:57
Owner - Parent Form nasıl kullanılmalı? - Yazar: mrmarman - 04-06-2020, Saat: 12:12
Cvp: Owner - Parent Form nasıl kullanılmalı? - Yazar: esistem - 04-06-2020, Saat: 12:54
Owner - Parent Form nasıl kullanılmalı? - Yazar: 3ddark - 04-06-2020, Saat: 13:37

Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  SQL Table Type parametre gecisi hakkında (Çözüldü) adelphiforumz 1 153 09-04-2026, Saat: 15:53
Son Yorum: adelphiforumz
Question Delphi formunu nasıl otomatik tam ekran yapabilirim ? erdemklt0 2 324 23-01-2026, Saat: 10:02
Son Yorum: csunguray
  TMS Web Core- REST İşlemlerini Nasıl Yapabilirim? kajmerantime 0 429 13-06-2025, Saat: 14:07
Son Yorum: kajmerantime
  form close de form bosalmiyor sadikacar60 11 1.626 24-01-2025, Saat: 19:25
Son Yorum: sadikacar60
  FastReport Dinamik Sayıya Göre Etiket Bastırma [ÇÖZÜLDÜ] bünyamin68 2 752 09-01-2025, Saat: 13:47
Son Yorum: bünyamin68



Konuyu Okuyanlar: 1 Ziyaretçi