2013-03-10 2 views
-2

Вот мой код для CheckXWinner функции, где мне нужно ссылаться на мою форме для того, чтобы нарисовать выигрышные линии:Ссылка формы в зависимости от класса

public void CheckXWinner(Button[] buttonArray, Form1 frm) 
    { 
     int arrLength = buttonArray.Length; 
     int root = (int)Math.Sqrt(Convert.ToDouble(arrLength)); 
     bool winner = false;//variable to keep the computer from going when Xwins 
     for (int i = 0; i < root; i++) 
     { 
      //Sets the counter for the winners back to zero 
      int d2Count = 0; 
      int d1Count = 0; 
      int hCount = 0; 
      int vCount = 0; 

       for(int j = 0; j < root; j++) 
       { 
        //increments the appropriate counter if the button contains an X 
        //Horizonal win 
        if (buttonArray[(i*root) + j].Text == "X") 
        { 
         hCount++; 
         if (hCount == root) 
         { 
          for (int z = (root - 1); z >= 0; z--) 
          { 
           buttonArray[(i*root) + z].BackColor = Color.IndianRed; 
          } 
          Xwins(); 
          winner = true; //sets winner to true so computer does not take turn 
         } 
        }//end of Horizonal win 

        //Left to right diagonal 
        if (buttonArray[j + (j*root)].Text == "X") 
        { 
         d1Count++; 
         if (d1Count == root) 
         { 
          for (int z = (root - 1); z >= 0; z--) 
          { 
           buttonArray[z + (z * root)].BackColor = Color.IndianRed; 
          } 
          Xwins(); 
          winner = true; 
         } 
        }//end of LTR win 

        //Right to left diagonal 
        if (buttonArray[(j*(root - 1)) + (root - 1)].Text == "X") 
        { 
         d2Count++; 
         if (d2Count == root) 
         { 
          for (int z = (root - 1); z >= 0; z--) 
          { 
           buttonArray[(z*(root - 1)) + (root - 1)].BackColor = Color.IndianRed; 
          } 
          Xwins(); 
          winner = true; 
         } 
        }//end of RTL win 

        //Vertical win 
        if (buttonArray[i + (root*j)].Text == "X") 
        { 
         vCount++; 
         if (vCount == root) 
         { 
          for (int z = (root - 1); z >= 0; z--) 
          { 
           buttonArray[i + (root*z)].BackColor = Color.IndianRed; 
          } 
          Xwins(); 
          winner = true; 
         } 
        }//end of vert win       
       }//end of for j loop 
     }//end of for loop 
     CheckDraw(); 
     if (winner == false) 
     { 
      ComputerGoes(buttonArray); 
     }; 

    }//end of CheckXWinner 

В другой части этого класса у меня есть обработчик для всех кнопок мыши, связанных с формой:

//Handle any button clicks 
    private void button_click(object sender, EventArgs e) 
    { 
     Button b = (Button)sender; 
     b.Text = "X"; 
     b.Enabled = false; 
     CheckXWinner(buttonArray, Form1 frm); 
    } 

у меня есть ошибки для Form1 части этого вызова, как я могу это исправить ???

+0

*** Что такое ошибки?!? – RBarryYoung

+0

В какой форме вы обрабатываете эту кнопку? – AbZy

+0

У меня есть игровой класс, в котором все это, отдельно от формы. Щелчок кнопки находится за пределами конструктора в классе Gameboard, так что CheckXWinner и т. Д. – BackDoorNoBaby

ответ

1

Пройдя через Form1 frm, вы должны фактически передать ссылку на экземпляр Form1. Основываясь на вашем комментарии к предложению об отправке this, кажется, что обработчик кнопки объявлен внутри другой формы (не в форме 1). Если это так, вы должны получить/сохранить ссылку на экземпляр Form1 и передать в:

CheckXWinner(buttonArray, a_ref_to_form); 

Однако, глядя на вашу реализацию CheckXWinner это не выглядит, как вы ссылаетесь frm в любом месте в любом случае!

Перепишите декларацию CheckXWinner в

public void CheckXWinner(Button[] buttonArray) 

И называть это так:

CheckXWinner(buttonArray); 
+0

Я получаю ошибки, когда добавляю это также в – BackDoorNoBaby

+0

, да, его там, поэтому я могу ссылаться на него при рисовании winline (еще не записал эту часть) – BackDoorNoBaby

+0

см. мой комментарий ниже, я пробовал переходить в «это», и я получаю сообщение об ошибке. Я пробовал это до публикации, и именно поэтому я смущен тем, что Im делает неправильно здесь – BackDoorNoBaby

0

FRM не объявлена ​​в любом месте, когда вы передаете его в качестве параметра.

передать «это» вместо Form1 frm.

+0

Я получаю сообщение об ошибке, когда пытаюсь передать «это» в – BackDoorNoBaby

+0

. Лучшее перегруженное совпадение метода для CheckXWinner (System.Windows.Forms.Button [], MyProgram.Form1) имеет некоторые недопустимые аргументы – BackDoorNoBaby

+0

вместо кнопки canram пройдите мимо "b" , –

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