1

Konu: Bir formun açık olduğunu algılayabilmek .

Merhaba,
Modal olması zorunlu bir formum (Form1) var. Bu form kullanıcnın bir butonu tıklamasıyla bir başka formu (Form2) çağırıyor (DO FORM ile). Form1'i kapattığımda Form2'nin de otomatik olarak kapanmasını istiyorum. Ancak her zaman Form2 çağırılmadığı için hata veriyor. Form2'nin açıldığını nasıl algılayabilirim?
Yani birden fazla form açık iken bir formun çalışıp çalışmadığını gösteren bir fonksiyon var mı?

Teşekkürler...

2

Re: Bir formun açık olduğunu algılayabilmek .

formu açarken tercihan bir isim ver: (form ismi de oluyor aslında)

Visual Fox Pro
DO FORM myForm NAME ikinciform


Diğer bir yerden açık mı değil mi kontrolü: ModalFormun destroy eventine

Visual Fox Pro
IF VARTYPE(ikinciform)="O" AND ! ISNULL(ikinciform)

  *form açık
  RELEASE ikinciform
ELSE
  *form açık değil
ENDI


bence yeni formu modal formda açtığın için modal forma bir property ver örneğin ikinciform
Modal fordan açarken komut:

Visual Fox Pro
DO FORM myForm NAME ThisForm.ikinciform


bu sayede modal form kapanırken zaten o propery de release olduğundan o formu da kapar.

VFP9 SP2

3

Re: Bir formun açık olduğunu algılayabilmek .

Yanıtınız için teşekkür ederim.
Yalnız tuhaf biçimde önerdikleriniz kimi zaman çalıştı kimi zaman da çalışmadı.
Örneğin VARTYPE(ikinciform)'un Return ettiği değer "U" yani unknown variable çıktı. Yalnız ilginç olan yavru formu (Form2) tek başına çalıştırdıktan (Run) ve kapattıktan sonra bu komut düzgün biçimde çalıştı. Bunun nedenini anlayamadım.
Bu arada denemelerim sırasında bir şey keşfettim (!) ve sorunumu çözdüm. Belki biliniyordur ama paylaşayım istedim.
Bir form aktif olsun ya da olmasın kapatmak için aşağıdaki ifadeyi kulllandım. Eğer bu form hiç memory'e yüklenmemiş olsa bile hata vermiyor.

RELEASE WINDOWS Form2

Ayrıca bir formun halen zeminde ya da aktif çalışıp çalışmadığını kontrol eden bir fonksiyon da varmış. O da WEXIST(). User-defined pencereler için var olan bu komut formlar için de çalışıyor.

IF WEXIST("İkinciForm")
    ....
ELSE
    ...
ENDIF
gibi kullandım.
VFP SP1 kullandığımı da belirtmeliyim.

4

Re: Bir formun açık olduğunu algılayabilmek .

Ben Ali'ni yaptigini oneririm. Ancak ufak bir hata var (hata da denemez ne demem gerektigini bilemedim).  Click'te:

Visual Fox Pro
DO FORM myForm NAME ikinciform

denince. ikinciForm degiskenini sadece Click metodu icindeki kod gorebilir. O nedenle diger yerlerde vartype(ikinciForm) sonu "U".

* click

Visual Fox Pro
thisform.AddProperty("ikinciForm", .null.)

DO FORM myForm NAME thisform.ikinciform

dersen thisform.ikinciForm formun her yerinden gorunecek.


Ikinci bir yol. Eger formlarin adi Unique ise:

Visual Fox Pro
wexist("ikinciFormunAdi")

onun var olup olmadigini gosterir (wvisible(..), w*()  fonksiyonlari cok eski ama zaman zaman faydali)

5

Re: Bir formun açık olduğunu algılayabilmek .

cetinbasoz yazdı:

Ben Ali'ni yaptigini oneririm. Ancak ufak bir hata var (hata da denemez ne demem gerektigini bilemedim).  Click'te:

Visual Fox Pro
DO FORM myForm NAME ikinciform


denince. ikinciForm degiskenini sadece Click metodu icindeki kod gorebilir. O nedenle diger yerlerde vartype(ikinciForm) sonu "U".


aslında proje açısından hata.
açıklamak için kod yazaken düşünmemişim. Formun adı çalıştığı event içinde hapis kalıyor :]

RELEASE WINDOW : Bu komutla bazen memoriden silindiğini ama resim olarak kaldığını hatırlıyorum, o nedenle dBase4 tabanlı olmama rağmen bırakmıştım.

VFP9 SP2

6

Re: Bir formun açık olduğunu algılayabilmek .

Merhaba,
Konuyla tam alakalı olmasa da aşağıdaki kodu kullanabilirsiniz.
Bu kod açık olan tüm formlar arasında dolaşıp formları kapatmaya zorlayan bir koddur.

Visual Fox Pro
Local loForm

    For Each m.loForm In _VFP.Forms
        If m.loForm.BaseClass == "Form"
            If m.loForm.QueryUnload()
                m.loForm.Release
            Else
                Return
            EndIf
        EndIf
    EndFor
/o---------------------o\
     www.haser.com
\o---------------------o/