Duyuruyu Kapat
Facebook Gözat
Twitter Gözat

c# formlar arası geçişte hata mesajı

Konu, 'C#' kısmında madrox06 tarafından paylaşıldı.

  1. madrox06

    madrox06 Yeni Üye

    Kayıt:
    4 Ocak 2014
    Mesajlar:
    11
    Beğenilen Mesajlar:
    0
    ben c# da bi program yazıyorum , programımda yaklasık 20 adet form var bunların hepsni form1 de tanımladım. form1de şifre var giriş yapınca form2 açılıyo. form2 de butonlarla diğer formları açıyorm. sorunum şu ;örnek olarak form2de butona tıkladım form3 ü show olarak açıyor sonra ben form3ü kapatıyorum form2den tekrar aynı butona tıklayınca form3 ü açmıyor hata mesajı veriyor.hata mesajı "Bırakılmış bir nesneye erişilemiyor." diyor. bu sorunu nasıl çözebilirim?
     
  2. burhan_94

    burhan_94 Yeni Üye

    Kayıt:
    2 Ocak 2011
    Mesajlar:
    18
    Beğenilen Mesajlar:
    0
    Meslek:
    Software Developer
    Şehir:
    Ankara
    this.close(); kullanırsan sıkıntı olmaz nasıl açıp kapatıyorsun ?
     
  3. madrox06

    madrox06 Yeni Üye

    Kayıt:
    4 Ocak 2014
    Mesajlar:
    11
    Beğenilen Mesajlar:
    0
    this.close(); veya this.hide(); yazsamda farketmiyo hata veriyo. İlginç olan su mesela aynı olayı form4 için baska butonla yapınca sıkıntı olmuyo.
     
  4. Ferhat Ozdemir

    Ferhat Ozdemir Daimi Üye

    Kayıt:
    14 Nisan 2006
    Mesajlar:
    3,268
    Beğenilen Mesajlar:
    3
    Meslek:
    Electronics and Computer Engineer
    Şehir:
    Texas
    ORnek kodları buraya ekleyebilir misin?
     
  5. madrox06

    madrox06 Yeni Üye

    Kayıt:
    4 Ocak 2014
    Mesajlar:
    11
    Beğenilen Mesajlar:
    0
    // form1 in kodları
    public partial class Form1 : Form
    {
    public Form2 frm2;
    public Form3 frm3;
    }

    public Form1()
    {
    InitializeComponent();
    frm2 = new Form2();
    frm3 = new Form3();
    frm2.frm1 = this;
    frm3.frm1 = this;
    }
    //form2 kodları
    private void button8_Click(object sender, EventArgs e)
    {
    frm1.frm3.Show(); //form 3 ü kapatana kadar sorun yok çalışıyor form2de tekrar button8 basınca hatayı bu satır olarak gösteriyo
    sorun çözme ipucu olarak bir kaynağı kullanmaya başlamadan önce onu serbest bırakın diyor.
    }
    //form3 kodları
    private void Form3_FormClosing(object sender, FormClosingEventArgs e)
    {
    this.close();
    }
     
  6. Ferhat Ozdemir

    Ferhat Ozdemir Daimi Üye

    Kayıt:
    14 Nisan 2006
    Mesajlar:
    3,268
    Beğenilen Mesajlar:
    3
    Meslek:
    Electronics and Computer Engineer
    Şehir:
    Texas
    Ben C# bilmiyorum, lakin cevabini C++ in mantigina gore vereyim, umarim calisir.
    Kod:
    // form1 in kodları
    public partial class Form1 : Form
    {
     public Form2 frm2;
     public Form3 frm3;
    }
    
    public Form1()
    {
    InitializeComponent();
     
    }
    //form2 kodları
    private void button8_Click(object sender, EventArgs e)
    {
     frm3 = new Form3();
     frm3.Show();  
    }
    //form3 kodları
    private void Form3_FormClosing(object sender, FormClosingEventArgs e)
    {
    this.close();
    }
    
     
  7. madrox06

    madrox06 Yeni Üye

    Kayıt:
    4 Ocak 2014
    Mesajlar:
    11
    Beğenilen Mesajlar:
    0
    bu kod olmaz form1 de form 3 dersen form2 de form3 göremezsin , form2de form3 yazıp senn dediğin gibi değiştirdim ama olmadı gene.

    --- Ekleme ---

    galiba sorun form ların açılışında değil, sorun form3 ü kapatınca form2deki button8 serbest kalmıyo hatayı button8in içindeymis gibi gösteriyo ama hata button8 de :S
     
  8. Ferhat Ozdemir

    Ferhat Ozdemir Daimi Üye

    Kayıt:
    14 Nisan 2006
    Mesajlar:
    3,268
    Beğenilen Mesajlar:
    3
    Meslek:
    Electronics and Computer Engineer
    Şehir:
    Texas
    Bence sorun, form3 nesnesi kapatildiktan sonra yok oluyor. DAha sonra olmayan bir nesneye erismeye calistigindan hata veriyor diye dusunuyorum.
    Bir de su sekilde dene bi:
    Kod:
    // form1 in kodları
    public partial class Form1 : Form
    {
     public Form2 frm2;
     public Form3 frm3;
    }
    
    public Form1()
    {
    InitializeComponent();
    frm2 = new Form2();
    frm3 = new Form3();
    frm2.frm1 = this;
    frm3.frm1 = this; 
    }
    //form2 kodları
    private void button8_Click(object sender, EventArgs e)
    {
     frm3 = new Form3();
     frm3.frm1 = this;
     frm1.frm3.Show();
    }
    //form3 kodları
    private void Form3_FormClosing(object sender, FormClosingEventArgs e)
    {
    this.close();
    }
    
     
  9. madrox06

    madrox06 Yeni Üye

    Kayıt:
    4 Ocak 2014
    Mesajlar:
    11
    Beğenilen Mesajlar:
    0
    private void button8_Click(object sender, EventArgs e)
    {
    frm3 = new Form3(); // bu satırdaki form3 gözükmüyor çünkü biz bunu form1 de tanımladık
    frm3.frm1 = this; // form1 de tanımladığını form2 de tanımlayamazsın diyor.
    frm1.frm3.Show();
    }
    sonuç döndük başa kısacası :) olmuyor. Hata ne acaba çok merak ediyorum :S
     
  10. Ferhat Ozdemir

    Ferhat Ozdemir Daimi Üye

    Kayıt:
    14 Nisan 2006
    Mesajlar:
    3,268
    Beğenilen Mesajlar:
    3
    Meslek:
    Electronics and Computer Engineer
    Şehir:
    Texas
    Demek ki, C# i sevmemekte cok hakliymisim. :) Dedigim gibi ben sadece mantik yurutmeye calistim, C++ a gore. Demek ki farkli isleyislere sahipler.
    Ben sustum artik. C# ci arkadaslardan biri mutlaka cevap verecektir.
    Kolay gelsin.
     
  11. madrox06

    madrox06 Yeni Üye

    Kayıt:
    4 Ocak 2014
    Mesajlar:
    11
    Beğenilen Mesajlar:
    0
    Çok teşekkür ederim.Bakalım cevap veren olacakmı.kolay gelsin.
     
  12. slymn++

    slymn++ Üye

    Kayıt:
    10 Temmuz 2012
    Mesajlar:
    66
    Beğenilen Mesajlar:
    0
    Şehir:
    İstanbul
    Nedense c# ile bende ilgilenmeme rağmen (c++ ile ilgilenen biri olarak yazma gereği duydum) :)



    Burda belirttiğin gibi form3 kapatılıyor yani o nesne destruct oluyor(ölüyor). Daha sonra o nesneye ulaşmak istediğinde hata verir,
    çünkü o nesneye tahsis edilen alan bırakılmıştır.



    frm.show() yaptığında olmayan nesneyi show yapıyorsun. Çözüm ne olur kapatmak yerine hide yapacaksın, veya nesneyi tekrar oluşturacaksın.

    Dediğim gibi c# da hello world bile yazmışlığım yok ama böyle bir çıkarımda bulunma hissi geldi nedense :)
    İşin ehli olanlar cevap yazarsa bende memnun olurum.
     
  13. madrox06

    madrox06 Yeni Üye

    Kayıt:
    4 Ocak 2014
    Mesajlar:
    11
    Beğenilen Mesajlar:
    0
    this.hide(); yapıncada olmuyoki gene nesne yi gizlenmiş gibi algılamıyo aynı satırda hata gösteriyo. işin ehli olan biri bu duruma bi el atsa bende çok memnun olcam :)

    --- Ekleme ---

    yaptım sonunda ya :D nesne dediğin gibi ölüyo form1de hepsini tanımlıyorum ama form 2 deyken form1 de oluşturduğum nesneleri bikere oluşturuyo kapatınca bidaha oluşturmuyo , formları form1 de değil form2de oluşturdum sorun kalmadı:) çok teşekkür ederim :)
     
  14. eskocast

    eskocast Yeni Üye

    Kayıt:
    6 Ocak 2017
    Mesajlar:
    1
    Beğenilen Mesajlar:
    0
    Şehir:
    Konya
    konuyu hortlatmak istemem ama hala aynı sorunu alıp çözüm bulamamış arkadaşlar var bu sorunun çözümü çok basit;

    frm.Show(); yapmak yerine frm.ShowDialog(); yaparsanız sorunu büyük ihtimal çözersiniz.
     
  15. snn7

    snn7 Üye

    Kayıt:
    23 Şubat 2014
    Mesajlar:
    145
    Beğenilen Mesajlar:
    22
    Meslek:
    Bilgisayar Mühendisi
    Şehir:
    Antalya
    Hiç böyle bir şeye rastlamadım.
    Bende çok formlu uygulamalar geliştiriyorum. Formu show ile açıp. Kendi close trigger'ı ile herhangi bir trigger ile kapatabilirsin Karmaşık datayı da objeler ile taşıyabilirsin.
    Kod:
    // form1 in kodları
    public partial class Form1 : Form
    {
    public Form2 frm2;
    public Form3 frm3;
    }
    
    public Form1()
    {
    InitializeComponent();
    
    }
    //form2 kodları
    private void button8_Click(object sender, EventArgs e)
    {
    frm2 = new Form2();
    frm2.Show();
    }
    //form3 kodları
    private void Form3_FormClosing(object sender, FormClosingEventArgs e)
    {
    //bu event ile zaten frm3 boşaltılıyor.
    MessageBox.Show("Kapatıldı");
    }
    Kurucu metot içinde yüklemeden dene. Form kapandığında tamamen kaldırılsın. Eğer kurucuda denemek istersen public değişkenlere {get;set;} ekle.
     
  16. xmen14

    xmen14 Yeni Üye

    Kayıt:
    31 Ocak 2017
    Mesajlar:
    1
    Beğenilen Mesajlar:
    0
    Şehir:
    Bolu
    Form3 frm3= new Form3();
    frm3.show(); yada
    frm3.showdialog(); yap.

    Bu şekilde aç.

    Eğer frm3 ten buton ile kapatacaksan

    this.close();

    ile kapat sıkıntı çıkmaz.