Şimdi Ara

c sharp projem sanırım sonsuz döngüye giriyor???

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
6
Cevap
0
Favori
853
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • çok fazla soru sorduğumun farkındayım ama bu işi öğrenmem lazım.

    benim normal bir formuma sql ile bağlantı oluşturdum ve veri tabanındaki bilgileri data gird view e yazdırıyor.her şey sorunsuz çalışıyor.sonra bir buton ve form ekledim.butona:
    "frm.Show();" üst kısma ise "Form2 frm = new Form2();" yazdım.
    this.Hide();

    sorunsuz bir şekilde 2.forma geçti.sonra 2.forma bir buton koydum ki tekrar birinci forma dönmek için.butona:
    "frm.Show();" üst kısma ise "Form1 frm = new Form1();"yazdım.
    this.Hide();

    her şey bunla başladı.sql bağlantı cümlesi "An unhandled exception of type 'System.StackOverflowException' occurred in Otomasyon.exe" diye hata veriyor.bazen Form1 frm = new Form1(); cümlesi de aynı hatayı veriyor.



    < Bu mesaj bu kişi tarafından değiştirildi Marcus Glory -- 9 Şubat 2013; 16:28:15 >







  • kodlarda hata vardır diye kodları da yazıyorum, birinci form;

    using System.Data.SqlClient;

    namespace WindowsFormsApplication1
    {
    public partial class Form1 : Form
    {


    SqlConnection baglanti = new SqlConnection("Data Source=Kapadokya\\SQLExpress; Initial Catalog=Telefon Otomasyonu;Integrated Security=True;Pooling=False");
    SqlCommand komut = new SqlCommand();
    SqlDataAdapter adaptor = new SqlDataAdapter();



    public Form1()
    {
    InitializeComponent();
    }

    private void groupBox1_Enter(object sender, EventArgs e)
    {

    }

    private void Form1_Load(object sender, EventArgs e)
    {



    }

    Form2 frm = new Form2();

    private void button1_Click(object sender, EventArgs e)
    {

    if ((baglanti.State == ConnectionState.Closed))
    baglanti.Open();
    komut = new SqlCommand("SELECT * FROM nokia ", baglanti);
    SqlDataReader reader = komut.ExecuteReader();
    reader.Read();


    DataSet ds = new DataSet();

    reader.Close();
    adaptor.SelectCommand = new SqlCommand("SELECT TelefonNo,Model,Renk,Islemci,IsletimSistemi,KullaniciGirisi,Kamera,Ekran,CiftSim from nokia", baglanti);
    adaptor.Fill(ds);
    dataGridView1.DataSource = ds.Tables[0];
    baglanti.Close();

    }


    private void button2_Click(object sender, EventArgs e)
    {



    }

    private void button3_Click(object sender, EventArgs e)
    {
    frm.Show();
    this.Hide();

    }

    private void button4_Click(object sender, EventArgs e)
    {

    }

    private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
    {

    }

    private void button5_Click(object sender, EventArgs e)
    {
    Application.Exit();
    }
    }
    }

    ikinci form;


    namespace WindowsFormsApplication1
    {
    public partial class Form2 : Form
    {



    Form1 nrm = new Form1();
    public Form2()
    {
    InitializeComponent();
    }



    private void button2_Click(object sender, EventArgs e)
    {
    Application.Exit();
    }

    private void groupBox1_Enter(object sender, EventArgs e)
    {

    }

    private void Form2_Load(object sender, EventArgs e)
    {

    }

    private void pictureBox1_Click(object sender, EventArgs e)
    {

    }

    private void button1_Click(object sender, EventArgs e)
    {
    nrm.Show();
    this.Hide();
    }


    }

    }




  • Öncelikle değişken isimlerini daha anlaşılır yapmanızı öneririm. Eğer sırf menü için form1 e geri dönüyorsanız mdi form kullanın.daha rahat olur. Yaşadığınız problem, hafızada zaten olan form 1 i tekrar oluşturduğunuz için oluşuyor gibi görünüyor. Form1 i bir de su şekilde çağırmayı deneyin:

    Form1 form1=Application.OpenForms[0] as Form1;
    form1.Show();

    < Bu ileti mobil sürüm kullanılarak atıldı >
  • Form2 frm = new Form2(); dediğinizden dolayı Ram'de direk yer tutuyorsunuz. Form2 geçtiğiniz taşma yapıyor onun için hata alıyorsunuz. Frm.show() yaptığınız yerde bence instancelayıp yani new Form2() deyip orda frm yi tutup show yapmanız yeterli olacaktır. Bir diğer konu ise Program.cs umarım açılışı form1 yapmışsınızdır. Lakin zaten form1 açılmaz açılışta. Dediğim gibi dışarda instance lamak yerine içerde yapınız. Aslında dataGridView doldurmanız , yani SQL cümleleri kullanmanız da çok saçma geldi fakat sizin tercihiniz. Öneri isterseniz tabi ki de veririm.
  • Merhaba altı ok

    Şunu Dene Muhtemelen Olucaktır:

    Form1 'in İçerisinde Hangi Butonun Form2'yi Açıyorsa oraya şunları yaz. ama sıra aynen bu şekilde olsun

    private void button_Form2_Show_Click(object sender, EventArgs e) 
    {
    if (Application.OpenForms["Form2"] != null)
    {
    this.Hide();
    Application.OpenForms["Form2"].Show();
    }
    else
    {
    Form2 frm = new Form2();
    this.Hide();
    frm.Show();
    }
    }


    Ve Form2'ye de Form1'i Nerede Çağırıyorsan oraya şunları yaz.

    private void button_Form1_Show_Click(object sender, EventArgs e) 
    {
    if (Application.OpenForms["Form1"] != null)
    {
    this.Hide();
    Application.OpenForms["Form1"].Show();
    }
    }


    Kopyala Yapıştır Yapabilrsin Form isimlerini değiştirmediysen çalışır ;) eğer halen sqlde hata alıyorsan daha farklı alternatifler gösterebilirim.

    iyi çalışmalar...




  • yardımcı olduğunuz için çok teşekkür ederim.eve gidince deneyeyim.
  • Yapay Zeka’dan İlgili Konular
    Daha Fazla Göster
    
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.