2014-09-29 10 views
0

Так что я делаю tic tac toe. В основном файле (Form1.cs) я хочу иметь только кнопки button1_click, button2_click, в которых я бы вызвал функцию из Class1. Моя проблема в том, что у меня есть цикл, поэтому debuger возвращает ошибку SystemStackOverflowException unhandelded.Передача значения из класса обратно в форму

Form1.cs:

Form1 frm1; 
    Class1 cl; 
    public Form1() 
    { 
     cl = new Class1(); 
     frm1 = this; 
     InitializeComponent(); 
    } 



    private void button5_Click(object sender, EventArgs e) //gumb za tip1 igro 
    { 
     cl.button1funkcija(frm1); 
    } 

Class1.cs

Form1 form = new Form1(); //its needed so i can use it in my own made functions (prehod_stan2()) 
    public void button1funkcija (Form1 form) 
    { 
     if (form.numericUpDown2.Value != 0) 
     { 
      form.label10.Text = "Preostale igre:" + form.numericUpDown2.Value; 
      tip = 3; 
      st_iger = form.numericUpDown2.Value; 
      prehod_stran2(); 
      form.errorProvider6.Clear(); 
      stanje(); 
     } 
     else //če je število iger enako 0, prikaži napako 
     { 
      form.errorProvider5.Clear(); 
      form.errorProvider6.SetError(form.numericUpDown2, "Število more biti večje od 0"); 
     } 
    } 

    public void prehod_stran2() 
    { 
     if (form.textBox1.Text == "") 
     { 
      form.errorProvider1.SetError(form.textBox1, "Polje mora biti izpolnjeno"); 
      if (form.textBox2.Text == "") 
       form.errorProvider2.SetError(form.textBox2, "Polje mora biti izpolnjeno"); 
     } 
    } 
+0

В вашем коде отсутствуют обработчики событий button1_click и button2_click, а также отсутствует часть вызываемого класса1. Мы не можем помочь вам без этой информации. – venerik

+1

Форма Form1 = новая строка Form1(); ', где вы, вероятно, ошибаетесь. Вам не нужен новый экземпляр формы - вы хотите использовать существующий экземпляр. Вы передадите экземпляр формы в конструктор 'Class1'. – Enigmativity

+0

Probelm - это код preety огромный, я не уверен, почему вам нужно нажать кнопку1 и кнопку2, они даже не выходят (имена зарезервированы для чего-то еще, что приходит позже) – user3421357

ответ

1

Form1 form = new Form1(); линия, где вы, вероятно, неправильно. Вам не нужен новый экземпляр формы - вы хотите использовать существующий экземпляр. Вы передадите экземпляр формы в конструктор Class1.

Когда вы позвоните по телефону cl = new Class1();, вам необходимо сменить его на cl = new Class1(this);, чтобы передать ссылку на форму до Class1. Конечно, вам нужно добавить правильный метод конструктора в Class1. Прошедшая ссылка затем заменяет код new Form1() на номер Class1.

+0

@ user3421357: Не создавайте новый экземпляр «Form1», просто обращайтесь к своим функциям («prehod_stan2()») по параметру формы в «public void button1funkcija (Form1 form)». Вы также можете выбрать подход, как указано выше, Enigmativity. Кроме того, вы создаете тот же именованный объект для формы Form1, то есть формы, которая может быть вероятной причиной исключения. –

Смежные вопросы