MDI Formlarda Child Formun İki Kere Açılmasını Önlemek

27 Kasım 2009 – 01:46

MDI formlarda child formun iki kere açılmasını önlemek için singleton tasarım desenini kullanacağız. MDI form olarak tanımlanmış formumuz Form1 olsun. Bunun içinde açacağımız child form ise Form2 olsun. Form1de herhangi bir şekilde Form2 çağrıldığında sadece bir tane instance oluşturarak bir tane açılmasını istiyorum. Bunun için Form2nin classına şu kodu yazalım.

 

static Form2 myform;

public static Form2 Myform()

{

 

    if (myform == null)

    {

        myform = new Form2();

    }

    return myform;

 

}

 

if (myform == null) yazmamız burada çok önemli. Form2nin sadece bir tane nesnesi oluşturulsun istiyoruz ve bu nesne daha önce oluşturulmamışsa yani null ise oluştur diyoruz. Bu şekilde buraya singleton desenini uyguladık. Daha sonra Form1 den bir buton eventından veya buna benzer herkangi bir şeyden Form2 yi çağırırken şu kodu yazıyoruz.

Form2 yeni = Form2.Myform();

yeni.MdiParent = this;

yeni.Show();

yeni.Activate();

 

Form2nin nesnesini oluştururken new Form2() diye değil de Form2.Myform() diye oluşturduk buna dikkat edelim. En son olarak da Form2nin kapanış eventına bi kod cümlesi daha eklememiz gerekiyor.

private void Form2_FormClosing(object sender, FormClosingEventArgs e)

{

     myform = null;

}

 

Bunu yazmazsak nesnesini oluşturup açtığımız Form2yi kapatıp tekrar açmak istediğimizde bir hatayla karşılaşırız. Bunu engellemek için bu cümleciği yazıyoruz. Nedeni form nesnemizi bir kere oluşturabilmek üzere oluşturduk ve bunun için “nesne null ise yarat” dedik. Bu yüzden nesneyi null yapmadan tekrardan oluşturamayız. Dolayısıyla form kapatılırken nesneye null değerini atıyoruz ki istediğimizde Form2yi tekrardan yaratabilelim.

Bookmark and Share
  1. 5 Responses to “MDI Formlarda Child Formun İki Kere Açılmasını Önlemek”

  2. Tabi bunun için Form2 class’ının constructor metodunun private olması gerekiyor yoksa birisi tutup
    Form2 yeni = new Form2();
    diyebilir. Ki o zaman da ikincisi yaratılmış olur.
    Güzel paylaşım. İyi çalışmalar..

    By Volkan Albayrak on Oca 20, 2010

  3. yok ordaki constructor değil volkan adı farklı zaten fark edersen zaten nesneye constructordan erişemediğimiz için public static bir metod yazıyoruz ya singleton deseninde burdaki o. Sonradan çağırırken Form2 yeni = Form2.Myform(); diye erişebiliyoruz.

    By Basak KOLDAS on Oca 20, 2010

  4. ne zamandır arıyordum tşkler.

    By takı on Tem 25, 2010

  5. Güzel bir kaynak oldu benim için.Teşekkür ederim..

    By hikaye on Tem 28, 2010

  6. Bilgilendirme için teşekkür ederim siteniz çok güzel iyi çalışmalar dilerim.

    By film izle on Ağu 5, 2010

Post a Comment

Subscribe without commenting