1. Ana Sayfa
  2. C Sharp

C# MdiForm İşlemleri ve Panel İçinde Form Açmak

C# MdiForm İşlemleri ve Panel İçinde Form Açmak
+ - 8

C# MdiForm İşlemleri ve Panel İçinde Form Açmak , yazımız ile c sharp eğitimlerimize devam ediyoruz. Bu dersimizde formları ayrı pencerelerde değilde tek ana pencerenin içerisinde nasıl açacağımızı göstereceğim. Ayrıca bir panel içerisinde form açma işlemini de göstereceğim. Benzer konular olduğundan dolayı tek ders içerisinde vermeyi daha uygun gördüm. Lafı fazla uzatmadan hadi gelin C Sharp MdiForm İşlemleri ve Panel İçinde Form Açmak dersimizde geçelim.

 

C Sharp MdiForm İşlemleri ve Panel İçinde Form Açmak

 

C Sharp MdiForm İşlemleri

C sharp’ta from içerisinde form açma işlemine MdiFrom adı verilmektedir. Her zaman olmasa da bazen gerekli olabilmektedir. Bazen bir gereklilik bazende tercih meselesi olan MdiForm işlemi yapılması nedense insanlara karışık geliyor. Ancak aslında çok basit bir işlemdir. Hagi görelim.

Öncelikle Ana form olacak formun özellikler sayfasına gelelim ve IsMdiContainer özelliğini true yapalım. Kod olarak yapmak isterseniz de,

this.IsMdiContainer = true;

kodunu kullanabiliriz. Bu kod ile formumuz bir form kapsayıcı haline geliyor. Yani bu form içerisine form yükleyebiliriz demek oluyor.

Şimdi Ana Form olacak formumuzun kod kısmını açıyoruz ve aşağıdaki metodu yazıyoruz.

        void AcilacakForm(Form Acilacak)
        {
            // Not: Ana Form (Form1) hariç, sadece Form2 olduğu için sadece Form2'yi ele alıyoruz.
            // Başka formlarda olursa hepsini kontrol eder.

            bool durum = false;
            // Burada AnaForm üzerinde açık olan mdi formlar içerisinde arama yapıyoruz.
            foreach (Form eleman in this.MdiChildren)
            {
                if (eleman.Text == Acilacak.Text) // Eğer Form2 Form1 üzerinde açık ise : 
                {
                    durum = true; // Eğer Form2 AnaForm üzerinde açık ise durum true olacak.
                    eleman.Activate(); // Form2 zaten açık olduğundan önümüze Form2 gelecektir.
                }
            }
            if (!durum) // Eğer Form2 AnaForm üzerinde açık değilse : 
            {
                Acilacak.MdiParent = this; // Form2'nin ana penceresi olarak AnaForm'u ayarlar.
                Acilacak.Show(); // Form2'yi açar
            }
        }
    

Şimdi mdi olarak açmak istediğiniz form için AnaForm’a bir buton ekleiyoruz ve click eventi içerisinde aşağıdakı kodlarımızı yazıyoruz.

 Form2 frm2 = new Form2();
            // From nesneni olarak parametre alan metodumuza açmak istediğimiz formu gönderiyoruz.
            AcilacakForm(frm2);

Hazırladığımızı metodu kullanarak istediğimizi halletmiş oluyoruz.

C sharp eğitimi

C Sharp Panel İçinde Form Açmak

Panel içinde form açma işlemini ilk defa küçük bir hile yapmak için kullanmıştım. Birbirinden bağımsız analiz formları vardı. Alışlar, Satışlar, Borçlar, Alacaklar gibi… Hepsini de ayrı formlarda yapmıştım ve ayrı butonlara bağlamıştım. Müşteri hepsini tek ekranda görmek istediğinde tüm formları tek formun içine sokmak bir dünya uğraş istiyordu. Bende bu yöntemi görmüştüm daha önce… O anda aklıma geldi ve bu yöntemi kullanarak saatler sürecek bir işlemden kurtulmuş oldum. Tabi sonradan iş yetkilendirmeye geldiğinde tekrar ayrı sayfalarda olması daha iyi olur demişlerdi. :D :D 

Yukarıdaki örneğimiz üzerinden devam edelim. AnaForm’a bir panel ekleyelim.

panel1.Controls.Clear(); // Panel'in içini temizliyoruz..
            Form2 frm2 = new Form2();
            frm2.TopLevel = false;
            panel1.Controls.Add(frm2); // panel1 içerisinde formu ekledik

            frm2.Show(); // formu gösterdik. Ancak buraya dikakt. ShowDialog(); olarak değil Show(); olarak açıyoruz.
            frm2.Dock = DockStyle.Fill; // Açılan formun paneli doldurmasını sağladık.
            frm2.BringToFront(); // formu panel içinde en öne getirdik

Yukarıda verdiğimiz kodlar sayesinde form2 yi AnaForm’a eklediğimiz panel nesnesi içerisinde gösterbililiyoruz.


C Sharp MdiForm İşlemleri ve Panel İçinde Form Açmak , dersimizde bu kadar dostlar. Diğer derslerimizde görüşmek üzere.

C Sharp Eğitim Seti ve ERP Programlama eğitimi sayfasına gitmek için tıklayınız.

Sağlıcakla ve takipte kalın. ?

Bu yazıya tepkiniz ne oldu?

Yazar Hakkında

Lise Ağ Sistemleri ve Yönetimi bölümü, üniversite Bilgisayar Programcılığı bölümü Ön Lisans, Yönetim Bilişim Sistemleri Lisans öğrenimi aldım. Askerlik görevimi tamamladım. Uzmanlık alanım; C# ve SQL Programlama dilleri ile müşteri odaklı, kullanıcı dostu ERP ve CRM gibi sistemleri geliştirmektir. Ayrıca şuanda PHP ve MYSQL alanında projeler geliştirmekteyim. C++, Phyton, Xamarin, MVC gibi konuları öğrenmek ve kendimi geliştirme çabası içerisindeyim. Discord için: https://discord.gg/FBxZeHu9

Değerli yorumlarınızı bekliyorum. :)

Yorumlar (8)

Popüler Yorumlar
  1. Merhaba,
    Panel den form açılmasımı yoksa mdi form açılmasımı daha hızlı

  2. Merhabalar,
    Aklıma ilk gelen yöntemler biraz uğraştırıcı ama yine de çözüm olabilecek yöntemler. Ancak bu yöntemlerde her forma, formun closing eventine ve bu bahsettiğin 300, 350 formu açtığın butonların altına (Click eventine) ve bir iki satır kod eklemeni gerektirecek.

    Yol 1
    Veritabanında bir tablo açarsın. Kullanıcı kodu/adını ve form adını bilgisini tutarsın. Her formu açarken buraya bir kayıt atarsın. Bu butona her tıklandığında o tabloyu kontrol edersin. O kullanıcı, o formu açmış ise tabloda kayıt vardır ve tekrar açmazsın. Formun closing eventinde de o kaydı tablodan silersin.
    Ek olarak bu sana hangi kullanıcı o anda hangi formda işlem yapıyor bilgisini de anlık olarak vermiş olur.
    Ek olarak bir miktar performans sorunu yaratabilir.
    —-
    Yol 2
    Bir class açarsın bu classta her form için bir değişken olur. From açıldığında bu değişkenin değerini 0 iken 1 yaparsın. Formu açarken bu değişkeni kontrol ettirerek açarsın böylece değişken 1 ise form açılmaz. Yine formların closing eventinde bu değişkenleri 0 yaparsın.
    Yol 1’e göre performanslı olur ama anlık olarak hangi kullanıcı hangi formda işlem yapıyor göremezsin.

    Aklıma gelen ilk yöntemler bunlar. Daha farklı ve daha efektif yöntemler var mı bilemiyorum. Araştırmak gerekir. Hatta araştırmak bile yetmeyebilir. Büyük forum sitelerinde (MSDN, StackOverlow) sorabilirsin.

  3. Merhaba,
    MDI form daha hızlı olur.

  4. mrb; ben c# ile bir uygulama geliştirmek istiyorum ama sorun yaşadığım yerler var. Yapılabilir mi kısmını size sormak istedim.

    bi form üzerinde webbrowser da textbox içinde girilmiş olan web sayfasını açıp belirli süre geçince bu süre sonunda ip de yenileyecek, sayfayı yenileyecek mümkünmüdür ?

  5. Hocam merhaba,
    Çalıştığım bir projede yaklaşık 300-350 form var, mesela form1’de bir buton form2yi açsın. Form2 açıksa o butona bir daha tıklandığında form2 açılmasın istiyorum. Bunu her form için tek tek yapmak yerine bir fonksiyonla tüm açık formları tarayıp, açık olan formların kapanana kadar açılmamasını istiyorum ancak bir sonuca varamadım.
    Yardımcı olabilir misiniz?

Yapılan Yorumlar
  1. mrb; ben c# ile bir uygulama geliştirmek istiyorum ama sorun yaşadığım yerler var. Yapılabilir mi kısmını size sormak istedim.

    bi form üzerinde webbrowser da textbox içinde girilmiş olan web sayfasını açıp belirli süre geçince bu süre sonunda ip de yenileyecek, sayfayı yenileyecek mümkünmüdür ?

  2. Hocam merhaba,
    Çalıştığım bir projede yaklaşık 300-350 form var, mesela form1’de bir buton form2yi açsın. Form2 açıksa o butona bir daha tıklandığında form2 açılmasın istiyorum. Bunu her form için tek tek yapmak yerine bir fonksiyonla tüm açık formları tarayıp, açık olan formların kapanana kadar açılmamasını istiyorum ancak bir sonuca varamadım.
    Yardımcı olabilir misiniz?

    • Merhabalar,
      Aklıma ilk gelen yöntemler biraz uğraştırıcı ama yine de çözüm olabilecek yöntemler. Ancak bu yöntemlerde her forma, formun closing eventine ve bu bahsettiğin 300, 350 formu açtığın butonların altına (Click eventine) ve bir iki satır kod eklemeni gerektirecek.

      Yol 1
      Veritabanında bir tablo açarsın. Kullanıcı kodu/adını ve form adını bilgisini tutarsın. Her formu açarken buraya bir kayıt atarsın. Bu butona her tıklandığında o tabloyu kontrol edersin. O kullanıcı, o formu açmış ise tabloda kayıt vardır ve tekrar açmazsın. Formun closing eventinde de o kaydı tablodan silersin.
      Ek olarak bu sana hangi kullanıcı o anda hangi formda işlem yapıyor bilgisini de anlık olarak vermiş olur.
      Ek olarak bir miktar performans sorunu yaratabilir.
      —-
      Yol 2
      Bir class açarsın bu classta her form için bir değişken olur. From açıldığında bu değişkenin değerini 0 iken 1 yaparsın. Formu açarken bu değişkeni kontrol ettirerek açarsın böylece değişken 1 ise form açılmaz. Yine formların closing eventinde bu değişkenleri 0 yaparsın.
      Yol 1’e göre performanslı olur ama anlık olarak hangi kullanıcı hangi formda işlem yapıyor göremezsin.

      Aklıma gelen ilk yöntemler bunlar. Daha farklı ve daha efektif yöntemler var mı bilemiyorum. Araştırmak gerekir. Hatta araştırmak bile yetmeyebilir. Büyük forum sitelerinde (MSDN, StackOverlow) sorabilirsin.

  3. Merhaba,
    Panel den form açılmasımı yoksa mdi form açılmasımı daha hızlı

  4. Merhabalar,
    İlk formuma bir panel yerleştirdim ve panelin içinde Form2 gözüküyor.
    Form2’nin içinde bulunan bir butona tıklandığında Form3 açılacak panelde,
    bunu nasıl yapabilirim?

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.