Form Create Edilmiş ise Oluşturma
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Form Create Edilmiş ise Oluşturma
Arkadaşlar form oluştururken
if not assigned(KullaniciListesi) then
KullaniciListesi := TKullaniciListesi.Create(AnaMenu);
KullaniciListesi.Show;
şeklinde bir kod kullanıyorum.
Formu kapatırkende
--> Kullanicilistesi := Nil;
---> self.free;
diyerek formları sağlıklı şekilde free edebiliyorum ancak bu close işleminde KullaniciListesi := nil yazmak yerine KullaniciListesi yerine parametrik bir kod yazmak istiyorum. Her formun close olayına kendine özel kod eklemek yerine standart bir kod yazmak istiyorum. Bunu nasıl yapabilirim. Amacım eğer form oluşturulmuş ise tekrar oluşturma ve oluşturulmuş formu göster , formu kapatırsa formu tamamiyle free et.
if not assigned(KullaniciListesi) then
KullaniciListesi := TKullaniciListesi.Create(AnaMenu);
KullaniciListesi.Show;
şeklinde bir kod kullanıyorum.
Formu kapatırkende
--> Kullanicilistesi := Nil;
---> self.free;
diyerek formları sağlıklı şekilde free edebiliyorum ancak bu close işleminde KullaniciListesi := nil yazmak yerine KullaniciListesi yerine parametrik bir kod yazmak istiyorum. Her formun close olayına kendine özel kod eklemek yerine standart bir kod yazmak istiyorum. Bunu nasıl yapabilirim. Amacım eğer form oluşturulmuş ise tekrar oluşturma ve oluşturulmuş formu göster , formu kapatırsa formu tamamiyle free et.
KullaniciListesi aslında bir degisken, icinde formun (yada Tform nesnesinin) adresini tutmakta. siz global bu degiskeni kullanacaksanız parametrik bir Close yordamı yazamazsınız.
bunun yerine programınızın basında bir TStringList olusturarak create edilen formları buraya obje olarak ekleyebilirsiniz. ilgili formun close unda da bu listedeki elemanı silebilirsiniz.
aynı formu tekrar cagırdıgınızda listede varmı diye bakmanız yeterli eger yok ise formu olusturup listeye eklemelisiniz eger listede var ise kayıtlı adresten formu cagırmalısınız.
ornegin formu create ederken
bunun yerine programınızın basında bir TStringList olusturarak create edilen formları buraya obje olarak ekleyebilirsiniz. ilgili formun close unda da bu listedeki elemanı silebilirsiniz.
aynı formu tekrar cagırdıgınızda listede varmı diye bakmanız yeterli eger yok ise formu olusturup listeye eklemelisiniz eger listede var ise kayıtlı adresten formu cagırmalısınız.
ornegin formu create ederken
Kod: Tümünü seç
try
KullaniciListesi:=TKullaniciListesi.create(nil)
FormListem.AddObject('KullaniciListesiFormu',KullaniciListesi);
except
ShowMessage('bir hata oldu.')
end;
ÜŞENME,ERTELEME,VAZGEÇME
Merhaba...
tercih etmeni tavsiye ederim...
- Sorun yaşamamışsın belki de yaşamayacaksın ama bunu Action olarak sırası geldiğinde kendiliğinden yapılmasını sağlamak bence daha doğrusu.
- FREE kullanmana izin veriliyor keza belki de başka bir formu free etmek istersin...
- Burada bringtofront komutu kullanırsan sorununu baştan halletmiş ve de parametrik çözüm aramaktan kurtulmuş olursun...@osmantn yazdı:if not assigned(KullaniciListesi) then
KullaniciListesi := TKullaniciListesi.Create(AnaMenu);
KullaniciListesi.Show;

Kod: Tümünü seç
if not assigned(KullaniciListesi) then
begin
KullaniciListesi := TKullaniciListesi.Create(AnaMenu);
KullaniciListesi.Show;
end else KullaniciListesi.Bringtofront;
Self.Free; yerine@osmantn yazdı:Formu kapatırkende
--> Kullanicilistesi := Nil;
---> self.free;
Kod: Tümünü seç
Action := caFree;
- Sorun yaşamamışsın belki de yaşamayacaksın ama bunu Action olarak sırası geldiğinde kendiliğinden yapılmasını sağlamak bence daha doğrusu.
- FREE kullanmana izin veriliyor keza belki de başka bir formu free etmek istersin...
- Önce free işlemi olsun sonra Nil edersin. Satırları ters yazmış olabilirsin, bir kontrol eder misin? ...
Not: Bunları FormClose eventinde yazılıp yazılmadığını sormuyorum bile... 

Kod: Tümünü seç
Action := caFree;
KullaniciListesi := Nil;

OnClose Event inde Action := caFree;
OnDestroy Event inde KullaniciListesi := Nil;
kullan
ayrıcadatam sağlıklı çalışabilmesi içinde
@mrmcop da belirttiği gibi kullan ayrıca bu kodun sağlaması yani kesin çalışması içinde
end. nın hemen üzerine yazmalısın. Daha önceleri application çalıştığında bu değişkenlerin tam olarak nil olmadıklarıyla karşılaşmıştım.initialization Application çalıştığında herşeyden önce ilk çalıştırılır.
Ayrıca parametrik yapıcaksanda @gmikri nin dediği yöntemi kullanmanı öneririm. Ben Eskiden dos tan kalma hala memory tasarrufu alışkanlığından TList i kullanıyorum
Tlist i bir pointer array gibi düşünebilirsiniz. Kullanımı basit.
Kolay gele
OnDestroy Event inde KullaniciListesi := Nil;
kullan
ayrıcada
Kod: Tümünü seç
if not assigned(KullaniciListesi) then
KullaniciListesi := TKullaniciListesi.Create(AnaMenu);
KullaniciListesi.Show;
@mrmcop da belirttiği gibi
Kod: Tümünü seç
if not assigned(KullaniciListesi) then
begin
KullaniciListesi := TKullaniciListesi.Create(AnaMenu);
KullaniciListesi.Show;
end else KullaniciListesi.Bringtofront;
end. nın hemen üzerine
Kod: Tümünü seç
initialization
KullaniciListesi := Nil;
Ayrıca parametrik yapıcaksanda @gmikri nin dediği yöntemi kullanmanı öneririm. Ben Eskiden dos tan kalma hala memory tasarrufu alışkanlığından TList i kullanıyorum

Kolay gele
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5
Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5
Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
- osmantaskiran
- Üye
- Mesajlar: 34
- Kayıt: 17 Nis 2004 09:27
- İletişim: