Как можно показать данные из другой формы - PullRequest
3 голосов
/ 22 мая 2010

Это в основном игра в крестики-нолики, и у меня есть другая форма, называемая Winner.cs, когда игрок выигрывает, я хочу, чтобы она вызывала форму (эта часть работает), а затем я хочу сказать, что xWinner.label = b1. текст "" + выиграл игру !. часть, которую я не могу получить, - это отображение текста в ярлыке формы победителей. Есть пример окна сообщения, которое закомментировано для справки вместо b1.text

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace MyGame
{
    public class Result1
    {


        static private int[,] Winners = new int[,]
                   {
                        {0,1,2},
                        {3,4,5},
                        {6,7,8},
                        {0,3,6},
                        {1,4,7},
                        {2,5,8},
                        {0,4,8},
                        {2,4,6},
                   };
        static public bool CheckWinner(Button[] myControls)
        {
            bool gameOver = false;
            for (int i = 0; i < 8; i++)
            {
                int a = Winners[i, 0], b = Winners[i, 1], c = Winners[i, 2];
                Button b1 = myControls[a], b2 = myControls[b], b3 = myControls[c];
                if (b1.Text == "" || b2.Text == "" || b3.Text == "")
                    continue;
                if (b1.Text == b2.Text && b2.Text == b3.Text)
                {
                    b1.BackColor = b2.BackColor = b3.BackColor = System.Drawing.Color.LightCoral;
                    b1.Font = b2.Font = b3.Font = new System.Drawing.Font("Microsoft Sans Serif", 32F, System.Drawing.FontStyle.Italic & System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));
                    gameOver = true;
                    Form xWinnerForm = new xWinnerForm();
                    xWinnerForm.Show();

                    //MessageBox.Show(b1.Text + " .... Wins the game!", "Game End", MessageBoxButtons.OK);
                    //break;
                }
            }
            return gameOver;
        }
    }
}

Ответы [ 2 ]

1 голос
/ 22 мая 2010

Одна вещь, которую вы можете сделать, это создать свой собственный метод Show в вашем классе cWinnerForm:

public void Show(string text)
{
    this.myLabel.Text = text;
    this.Show();
}

тогда вам придется изменить две строки кода в вашем блоке кода:

из этого:

Form xWinnerForm = new xWinnerForm();
xWinnerForm.Show();

к этому:

xWinnerForm xWinnerForm = new xWinnerForm();
xWinnerForm.Show(b1.Text);

Другой вариант - передать текст в конструктор xWinnerForm.

0 голосов
/ 22 мая 2010

Похоже, что текстовое поле b1 является частным (или защищенным).Публикация должна сделать свое дело.

Если единственное, что вам нужно от b1 - это имя победителя, каждая форма в winforms имеет тег, который является открытым.Вы можете установить тег после того, как кто-то выиграет имя победителя, а затем в другой форме выполнить b1.Tag.ToString (), чтобы получить его там.

Кроме того, в качестве отступления;В «реальном» приложении вы, вероятно, захотите инкапсулировать некоторые из этих компонентов в разные классы, вместо того чтобы формы смотрели на элементы управления друг друга.

EDIT

У меня сейчас нет Visual Studio, но я считаю, что в окне свойств вы можете установить для этого конкретного текстового поля значение "public".

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