MessageBox.Show не отображается в форме - PullRequest
0 голосов
/ 25 февраля 2019

Я играю в крестики-нолики и хочу показать окно сообщения, когда пользователь выиграл.Но когда я проверяю его и нажимаю на button1, button2 и button3, в форме или на консоли ничего не происходит.Я думаю, что-то перепутал с операторами == и =, но я не уверен, что именно.

Это мой текущий код:

bool buttonisclicked1 = false;
bool buttonisclicked2 = false;
bool buttonisclicked3 = false;

public void button1_Click(object sender, EventArgs e)
{
   Button clickedButton1 = (Button)sender;
   clickedButton1.Text = "X";

   if (clickedButton1.Text == "X")
   {
      buttonisclicked1 = true;
   }
}

public void button2_Click(object sender, EventArgs e)
{
   Button clickedButton2 = (Button)sender;
   clickedButton2.Text = "X";

   if (clickedButton2.Text == "X")
   {
      buttonisclicked2 = true;
   }
}

public void button3_Click(object sender, EventArgs e)
{
   Button clickedButton3 = (Button)sender;
   clickedButton3.Text = "X";

   if (clickedButton3.Text == "X")
   {
      buttonisclicked3 = true;
   }
}

public void Win()
{
   if (buttonisclicked1 && buttonisclicked2 && buttonisclicked3 == true)
   {
      Console.WriteLine("You won");
      MessageBox.Show("You won!");
   }
}

Ответы [ 2 ]

0 голосов
/ 25 февраля 2019

Вы никогда не вызываете метод Win().Вы объявляете это, но не используете его.

    bool buttonisclicked1 = false;
    bool buttonisclicked2 = false;
    bool buttonisclicked3 = false;



    public void button1_Click(object sender, EventArgs e)
    {
        Button clickedButton1 = (Button)sender;
        clickedButton1.Text = "X";

        buttonisclicked1 = true;

        Win()
    }

    public void button2_Click(object sender, EventArgs e)
    {
        Button clickedButton2 = (Button)sender;
        clickedButton2.Text = "X";

        buttonisclicked2 = true;

        Win()
    }

    public void button3_Click(object sender, EventArgs e)
    {
        Button clickedButton3 = (Button)sender;
        clickedButton3.Text = "X";

        buttonisclicked3 = True;

        Win()
    }

    public void Win()
    {
        if (buttonisclicked1 && buttonisclicked2 && buttonisclicked3 == true)
        {
            Console.WriteLine("You won");
            MessageBox.Show("You won!");

        }
    }
}

Причина, по которой я поставил Win() в каждом Click Event(), заключается в том, что он будет проверять условия каждый раз, несмотря на порядок нажатия кнопок..

Вам не нужно иметь оператор If, чтобы проверить, изменилось ли свойство .Text кнопки, так как для него установлено значение , всегда изменяется на 'X'.Если у вас есть другие условия и код в Click Event s, которые могут либо изменить свойство .Text на что-то другое, то имеет смысл иметь оператор If.В противном случае - в этом нет необходимости.

И из того, что я могу сказать, вы, кажется, используете == и = очень хорошо в своих If утверждениях:)

0 голосов
/ 25 февраля 2019

Ваш код не очень элегантный, но с этим должно работать:

 bool buttonisclicked1 = false;
bool buttonisclicked2 = false;
bool buttonisclicked3 = false;



public void button1_Click(object sender, EventArgs e)
{
    Button clickedButton1 = (Button)sender;
    buttonisclicked1 = true;
    clickedButton1.Text = "X";

    Win();
}

public void button2_Click(object sender, EventArgs e)
{
    Button clickedButton2 = (Button)sender;
    buttonisclicked2 = true;
    clickedButton2.Text = "X";
    Win();
}

public void button3_Click(object sender, EventArgs e)
{
    Button clickedButton3 = (Button)sender;
     buttonisclicked3 = true;
    clickedButton3.Text = "X";
    Win();
}

        public void Win()
{
    if (buttonisclicked1 && buttonisclicked2 && buttonisclicked3 == true)
    {
        Console.WriteLine("You won");
        MessageBox.Show("You won!");

    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...