Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Runtime Form Oluşturmak
#1
Merhaba, 

Projemde bir Mdiform var ve bu form üzerindeki bir butonla 2 veya daha çok sayıda runtime mdichildform create ediyorum.

Sorum şu;

Örneğin 3 adet create ettiğim formlardan sadece son create ettiğime mdiform üzerinden ulaşabiliyorum, diğer ilk ikisine form ismi olmadığından ulaşamıyorum.

Bu formlara ulaşabileceğim bir method paylaşırsanız çok makbule geçecek.



Şimdiden teşekkürler.
Cevapla
#2
Aynı nesne ile create ediyorsundur. hepsi için ayrı Form nesnesi oluştur veya objectlist kullan.
WWW
Cevapla
#3
(10-06-2023, Saat: 20:29)ermanispir@gmail.com Adlı Kullanıcıdan Alıntı: Merhaba, 

Projemde bir Mdiform var ve bu form üzerindeki bir butonla 2 veya daha çok sayıda runtime mdichildform create ediyorum.

Sorum şu;

Örneğin 3 adet create ettiğim formlardan sadece son create ettiğime mdiform üzerinden ulaşabiliyorum, diğer ilk ikisine form ismi olmadığından ulaşamıyorum.

Bu formlara ulaşabileceğim bir method paylaşırsanız çok makbule geçecek.



Şimdiden teşekkürler.

Bunu yapmak için, oluşturduğunuz yeni MdiChild formlarını bir `TList` nesnesinde saklayabilirsiniz. Bu şekilde, tüm oluşturulan formlara erişebilirsiniz.

Örneğin, MdiChild formlarını saklamak için bir `TList` oluşturun ve her yeni MdiChild formu açarken `Add` yöntemini kullanın:

type
  TForm1 = class(TForm)
   btnOpenChildForms: TButton;
   procedure btnOpenChildFormsClick(Sender: TObject);
 private
   FChildForms: TList;
 public
   constructor Create(AOwner: TComponent); override;
   destructor Destroy; override;
 end;
 
implementation

{$R *.dfm}

constructor TForm1.Create(AOwner: TComponent);
begin
 inherited;
 FChildForms := TList.Create;
end;

destructor TForm1.Destroy;
var
 I: Integer;
begin
 for I := 0 to FChildForms.Count - 1 do
   TCustomForm(FChildForms[I]).Free; // Free child forms
 FChildForms.Free; // Free the list
 inherited;
end;

procedure TForm1.btnOpenChildFormsClick(Sender: TObject);
var
 ChildForm: TForm;
begin
 // Create a new MdiChild form
 ChildForm := TForm.Create(Application);
 ChildForm.Parent := Self;
 ChildForm.BorderStyle := bsNone;
 ChildForm.WindowState := wsMaximized;

 // Add the new form to the list
 FChildForms.Add(ChildForm);

 // Show the new form
 ChildForm.Show;
end;

Bu şekilde, formların isimlerine ihtiyacınız kalmayacak ve tüm oluşturulan MdiChild formlarına erişebileceksiniz. Her formu liste nesnesine eklediğinizde, form örneklerine listeyi kullanarak erişebilirsiniz.

Ayrıca, MdiChild formlarını ayrı bir `TPanel` içinde görüntülemek için paneli oluşturabilir ve her yeni formu panele ekleyebilirsiniz. Böylece, form listesindeki formlara erişirken, her MdiChild formun panele yerleştirildiği panel üzerinde görüntüleyebilirsiniz.
-----------------------------------------
Cevapla
#4
(26-07-2023, Saat: 12:33)delphiman Adlı Kullanıcıdan Alıntı: Bunu yapmak için, oluşturduğunuz yeni MdiChild formlarını bir `TList` nesnesinde saklayabilirsiniz. Bu şekilde, tüm oluşturulan formlara erişebilirsiniz.

Örneğin, MdiChild formlarını saklamak için bir `TList` oluşturun ve her yeni MdiChild formu açarken `Add` yöntemini kullanın:

type
  TForm1 = class(TForm)
   btnOpenChildForms: TButton;
   procedure btnOpenChildFormsClick(Sender: TObject);
 private
   FChildForms: TList;
 public
   constructor Create(AOwner: TComponent); override;
   destructor Destroy; override;
 end;
 
implementation

{$R *.dfm}

constructor TForm1.Create(AOwner: TComponent);
begin
 inherited;
 FChildForms := TList.Create;
end;

destructor TForm1.Destroy;
var
 I: Integer;
begin
 for I := 0 to FChildForms.Count - 1 do
   TCustomForm(FChildForms[I]).Free; // Free child forms
 FChildForms.Free; // Free the list
 inherited;
end;

procedure TForm1.btnOpenChildFormsClick(Sender: TObject);
var
 ChildForm: TForm;
begin
 // Create a new MdiChild form
 ChildForm := TForm.Create(Application);
 ChildForm.Parent := Self;
 ChildForm.BorderStyle := bsNone;
 ChildForm.WindowState := wsMaximized;

 // Add the new form to the list
 FChildForms.Add(ChildForm);

 // Show the new form
 ChildForm.Show;
end;

Bu şekilde, formların isimlerine ihtiyacınız kalmayacak ve tüm oluşturulan MdiChild formlarına erişebileceksiniz. Her formu liste nesnesine eklediğinizde, form örneklerine listeyi kullanarak erişebilirsiniz.

Ayrıca, MdiChild formlarını ayrı bir `TPanel` içinde görüntülemek için paneli oluşturabilir ve her yeni formu panele ekleyebilirsiniz. Böylece, form listesindeki formlara erişirken, her MdiChild formun panele yerleştirildiği panel üzerinde görüntüleyebilirsiniz.

TList yerine TObjectList kullanırsanız tüm ChildFormları tek tek free etmek zorunda kalmazsınız. ObjectList.Free barındırdığı elemanları da Free eder.
There's no place like 127.0.0.1
WWW
Cevapla
#5
(27-07-2023, Saat: 08:52)SimaWB Adlı Kullanıcıdan Alıntı:
(26-07-2023, Saat: 12:33)delphiman Adlı Kullanıcıdan Alıntı: Bunu yapmak için, oluşturduğunuz yeni MdiChild formlarını bir `TList` nesnesinde saklayabilirsiniz. Bu şekilde, tüm oluşturulan formlara erişebilirsiniz.

Örneğin, MdiChild formlarını saklamak için bir `TList` oluşturun ve her yeni MdiChild formu açarken `Add` yöntemini kullanın:

type
  TForm1 = class(TForm)
   btnOpenChildForms: TButton;
   procedure btnOpenChildFormsClick(Sender: TObject);
 private
   FChildForms: TList;
 public
   constructor Create(AOwner: TComponent); override;
   destructor Destroy; override;
 end;
 
implementation

{$R *.dfm}

constructor TForm1.Create(AOwner: TComponent);
begin
 inherited;
 FChildForms := TList.Create;
end;

destructor TForm1.Destroy;
var
 I: Integer;
begin
 for I := 0 to FChildForms.Count - 1 do
   TCustomForm(FChildForms[I]).Free; // Free child forms
 FChildForms.Free; // Free the list
 inherited;
end;

procedure TForm1.btnOpenChildFormsClick(Sender: TObject);
var
 ChildForm: TForm;
begin
 // Create a new MdiChild form
 ChildForm := TForm.Create(Application);
 ChildForm.Parent := Self;
 ChildForm.BorderStyle := bsNone;
 ChildForm.WindowState := wsMaximized;

 // Add the new form to the list
 FChildForms.Add(ChildForm);

 // Show the new form
 ChildForm.Show;
end;

Bu şekilde, formların isimlerine ihtiyacınız kalmayacak ve tüm oluşturulan MdiChild formlarına erişebileceksiniz. Her formu liste nesnesine eklediğinizde, form örneklerine listeyi kullanarak erişebilirsiniz.

Ayrıca, MdiChild formlarını ayrı bir `TPanel` içinde görüntülemek için paneli oluşturabilir ve her yeni formu panele ekleyebilirsiniz. Böylece, form listesindeki formlara erişirken, her MdiChild formun panele yerleştirildiği panel üzerinde görüntüleyebilirsiniz.

TList yerine TObjectList kullanırsanız tüm ChildFormları tek tek free etmek zorunda kalmazsınız. ObjectList.Free barındırdığı elemanları da Free eder.

AOwnsObjects parametresini true geçerler ise  Wink
Mal sahibi, mülk sahibi
Hani bunun ilk sahibi ?
Mal da yalan mülk de yalan
Var biraz da sen oyalan...
WWW
Cevapla
#6
(28-07-2023, Saat: 19:05)Tuğrul HELVACI Adlı Kullanıcıdan Alıntı: AOwnsObjects parametresini true geçerler ise  Wink

Üstad, varsayılan değeri zaten True olduğu için kurcalamaya gerek yok  Smile
There's no place like 127.0.0.1
WWW
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Optik form kodlama baloglurecep 8 1.468 16-11-2023, Saat: 16:23
Son Yorum: COMMANDX
Sad Tabsheet içinde Form Create, Close olayları YILDIRIMBEY 0 274 24-08-2023, Saat: 17:26
Son Yorum: YILDIRIMBEY
  parquet dosyası oluşturmak bydelphi 4 1.223 14-06-2023, Saat: 09:12
Son Yorum: bydelphi
  Cxgrid runtime oluşan sütünların format ve toplam alma ve query currensy true yapm hk diseqc 3 955 10-04-2023, Saat: 12:53
Son Yorum: diseqc
  mdi child form sorunu goabdullah 3 3.223 20-03-2023, Saat: 21:37
Son Yorum: CesuR



Konuyu Okuyanlar: 1 Ziyaretçi