Çözüldü Visual Studio Form kapatma döngüye giriyor

Bu konu çözüldü olarak işaretlenmiştir. Çözülmediğini düşünüyorsanız konuyu rapor edebilirsiniz.
Katılım
30 Temmuz 2019
Mesajlar
3.632
Çözümler
23
Daha fazla  
Cinsiyet
Erkek
Meslek
Öğrenci
Arkadaşlar merhaba, Bilgisayar Programcılığı öğrencisiyim ve bir tane projem var. Şuan için 1 tane anasayfa formu olmak üzere toplam 5 tane formdan oluşan bir projem var. Sorunumun neyden kaynaklandığını buldum fakat bir türlü çözüme kavuşturamadım. Sorunum:


Anasayfa formumun FormClosed eventinde "Programı kapatmak istediğinize emin misiniz?" sorusu çıkan şıklı bir MessageBox oluşturdum. Eğer programı çalıştırır çalıştırmaz çıkış yapmaya çalışırsam sıfır sıkıntı bir şekilde tek seferde programı kapatabiliyorum fakat eğer programı açtıktan sonra başka bir forma geçiş yaparsam sonra o formu kapatıp Anasayfa formuma geçiş yapıp programı kapatmaya çalıştığımda açılmış olan form sayısı kadar döngüye giriyor MessageBox ekranı. Yani burada eğer yanılmıyorsam diğer formlar, Anasayfamın FormClosed eventini tekrar tekrar tetikliyor bu yüzden de döngüye giriyor. Sorunun bu olduğunu düşünüyorum fakat bir türlü sorunumu çözüme kavuşturamadım. Şunu da ekleyeyim: Diğer formlarımın FormClosed Eventsleri şu şekilde; diğer formlarımı kapatınca Anasayfa formumun açılmasını istiyorum. O yüzden buna uygun olacak şekilde kodlamaya çalıştım.

Anasayfa formum hariç diğer formlarımın FormClosed Eventsleri:


C#:
        private void FormTamGunPersonel_FormClosed(object sender, FormClosedEventArgs e)
        {
            this.Hide();
            formAnasayfa.ShowDialog();
        }

Normalde formAnasayfa.Show(); şeklinde kullanıyordum fakat sorunumu çözmek için chatGPT'den yardım aldığım sırada chatGPT bu şekilde düzeltmişti o yüzden bu şekilde kaldı. Burada kullanmış olduğum "this.Hide();" kodu yüzünden bu sorunla karşılaştığımı düşünüyorum. Sonuçta bu kod mevcut formu sadece gizliyor, kapatmıyor diye biliyorum. Kapatmak için nasıl bir kod kullanmam gerekiyor onu da bilmiyorum. "this.Close();" denedim fakat yine aynı sorunla karşılaştım. "Application.Exit();" yazsam zaten bu direkt programı kapatmak için kullanılan bir kod bunu istemiyorum.


Anasayfa formumun FormClosing Eventsi:


C#:
private void FormAnasayfa_FormClosing(object sender, FormClosingEventArgs e)
{
    try
    {

        if (isExiting) return;

        DialogResult result = MessageBox.Show("Programı Kapatmak İstediğinize Emin misiniz?", "Çıkış",
            MessageBoxButtons.YesNo,
            MessageBoxIcon.Question
        );

        if (result == DialogResult.No)
        {
            e.Cancel = true;
        }
        else
        {
            isExiting = true;
            Application.Exit();
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show("Program Kapatılırken Hata Oluştu.." + ex.Message);
    }
    finally
    {
        baglanti.Close();
    }
}



Benim yazdığım kod normalde bu gördüğünüz kodun "isExiting" bayrak ifadesi olmayan hâliydi. Bu isExiting bayrak ifadesini de yine aynı şekilde chatGPT'den yardım aldığım sırada chatGPT'nin bana önerdiği çözüm yoluydu fakat bu da çözüm olmadı maalesef.



Yani uzun lafın kısası sorunun kaynağını biliyor gibi hissediyorum; diğer formlarım kapatılamadığı için eğer o formları çalıştırırsam ve Anasayfa formumda programdan çıkış yapmaya çalışırsam, daha önce çalıştırmış olduğum form sayısı kadar program döngüye giriyor. Yani her döngüye girdiğinde ve "Evet"e tıkladığımda aslında önce diğer formlarımı kapatıyor. Bundan dolayı bu sorunla karşılaştığımı düşünüyorum fakat çözüme bir türlü ulaşamadım. Yardımcı olabilir misiniz?


Sorun aslında kafamda çok basit fakat kelimelere dökememiş gibi hissediyorum :D Umarım anlaşılır olmuştur..
 
Çözüm
1717223525201.png

Problem bundan kaynaklanıyor. Sürekli yeni bir ana sayfa başlatıyorsun. Dolayısıyla diğer ana sayfalar gizlide kalmış oluyor. Çözüm basit, ana sayfayı ya açık formlardan getireceksin, yada dilin özelliklerinden yararlanacaksın.

C# bir OOP dil. Object Oriented Programming (Nesne yönelimli programlama) dili. Bu dilin sahip olduğu özelliklerden biri ise farkında olmadan kullandığın constructorlar. Constructor'da FormAnasayfa'yı parametre olarak alırsan, daha sonrasında çağırmak istediğinde mevcut tek örneğini çağırmış olacaksın, kopyasını değil.

Ek olarak açık formları da böyle getiriyorsun;


20240601_093758-ezgif.com-video-to-gif-converter (1).gif
Projeyi komple paylaşır mısın? Eve geçince debug deneyeyim. Application.Exit diğer formlari kendi formunla beraber direkt yok etmeli açık olsalar bile. Görmek lazım ne oluyor ne bitiyor.
Nasıl paylaşabilirim acaba? Sosyalde dosya paylaşılabiliniyor mu? C#'ı ve Visual Studio'yu yeni öğreniyorum. Yanilmiyorsam repos klasöründe ki proje dosyalarını paylaşmam gerekiyor değil mi?
 
Nasıl paylaşabilirim acaba? Sosyalde dosya paylaşılabiliniyor mu? C#'ı ve Visual Studio'yu yeni öğreniyorum. Yanilmiyorsam repos klasöründe ki proje dosyalarını paylaşmam gerekiyor değil mi?
Projeyi arşivle, MediaFire yada Drive'a yükle. Repos klasöründe uygulamana ne ad verdiysen o klasörü zipliyorsun.
 
Projeyi arşivle, MediaFire yada Drive'a yükle. Repos klasöründe uygulamana ne ad verdiysen o klasörü zipliyorsun.
Ödevime veri tabanı bağlı. Bu projeyi arşivlediğim zaman içinde veri tabanı olmayacağı için problem yaşar mısınız acaba? Yoksa veri tabanını da mı .bak uzantılı yedekleyip arşivlemeliyim acaba?
 
Ödevime veri tabanı bağlı. Bu projeyi arşivlediğim zaman içinde veri tabanı olmayacağı için problem yaşar mısınız acaba? Yoksa veri tabanını da mı .bak uzantılı yedekleyip arşivlemeliyim acaba?
Veri tabanın eğer MySQL ise mysqldump kullan onu da ekle. MsSQL'se sadece kodu at yeter ben devre dışı bırakırım bağlantıyı. Amacımız sadece kapanma durumunda ne yaptığını görmek.
 
1717223525201.png

Problem bundan kaynaklanıyor. Sürekli yeni bir ana sayfa başlatıyorsun. Dolayısıyla diğer ana sayfalar gizlide kalmış oluyor. Çözüm basit, ana sayfayı ya açık formlardan getireceksin, yada dilin özelliklerinden yararlanacaksın.

C# bir OOP dil. Object Oriented Programming (Nesne yönelimli programlama) dili. Bu dilin sahip olduğu özelliklerden biri ise farkında olmadan kullandığın constructorlar. Constructor'da FormAnasayfa'yı parametre olarak alırsan, daha sonrasında çağırmak istediğinde mevcut tek örneğini çağırmış olacaksın, kopyasını değil.

Ek olarak açık formları da böyle getiriyorsun;


20240601_093758-ezgif.com-video-to-gif-converter (1).gif
 
Çözüm
Eki Görüntüle 2210217
Problem bundan kaynaklanıyor. Sürekli yeni bir ana sayfa başlatıyorsun. Dolayısıyla diğer ana sayfalar gizlide kalmış oluyor. Çözüm basit, ana sayfayı ya açık formlardan getireceksin, yada dilin özelliklerinden yararlanacaksın.

C# bir OOP dil. Object Oriented Programming (Nesne yönelimli programlama) dili. Bu dilin sahip olduğu özelliklerden biri ise farkında olmadan kullandığın constructorlar. Constructor'da FormAnasayfa'yı parametre olarak alırsan, daha sonrasında çağırmak istediğinde mevcut tek örneğini çağırmış olacaksın, kopyasını değil.

Ek olarak açık formları da böyle getiriyorsun;


Eki Görüntüle 2210227
Çok teşekkür ederim ilgi ve alakanız için.. Çözüm olarak işaretledim.
 

Technopat Haberler

Geri
Yukarı