Как я могу передать 2 переменные из одной формы в другую? - PullRequest
0 голосов
/ 18 февраля 2019

У меня есть 2 формы: Game и newPlayer.Когда вы нажимаете кнопку в игре, она открывает диалоговое окно формы newPlayer, в котором кто-то вводит свое имя и выбирает цвет в поле со списком: красный, зеленый, синий или желтый.Я сохраняю эту информацию в 2 переменных: имя (строка) и цвет (int - это индекс comboBox).Я хочу передать эти две переменные в форму Game.

Я попытался объединить их в одну строку и передать только один переменный в форму Game, но безуспешно.

public partial class Game : Form
{

    static int nPlayers = 4;
    static List<Player> players = new List<Player>();
    public string name = "";

private void button3_Click(object sender, EventArgs e)
    {
        using (newPlayer np = new newPlayer())
        {
            if (np.ShowDialog() == DialogResult.OK)
            {
                this.name = np.TheValue;
            }
        }
        MessageBox.Show("Welcome " + name + "!");

    }

изатем:

public partial class newPlayer : Form
{
    public string name = "";

public string TheValue
    {
        get { return this.name; }
    }

    private void button1_Click(object sender, EventArgs e)
    {
        if (textBox1.Text != "")
        {
            if (comboBox1.SelectedIndex > -1)
            {
                this.name = textBox1.Text + comboBox1.SelectedIndex.ToString();
                MessageBox.Show(newPlayer.name);
                this.Close();
            } else
            {
                MessageBox.Show("Write your name and choose a color!");
            }
        } else
        {
            MessageBox.Show("Write your name and choose a color!");
        }
    }

В MessageBox newPlayer он выглядит правильно, например, «Имя1».Но в MessageBox игры он выглядит пустым.Может кто-нибудь помочь, пожалуйста?

1 Ответ

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

Вы забыли установить DialogResult при закрытии формы.

Попробуйте это:

this.DialogResult = DialogResult.OK;
this.Close();

Если бы я писал этот код, я мог бы сделать это большекак это:

Игра:

public partial class Game : Form
{
    public Game()
    {
        InitializeComponent();
    }

    private string _playerName = "";

    private void button3_Click(object sender, EventArgs e)
    {
        using (NewPlayer np = new NewPlayer())
        {
            if (np.ShowDialog() == DialogResult.OK)
            {
                _playerName = np.PlayerName;
                MessageBox.Show($"Welcome {_playerName}!");
            }
        }
    }
}

NewPlayer:

public partial class NewPlayer : Form
{
    public NewPlayer()
    {
        InitializeComponent();
    }

    private string _playerName = "";

    public string PlayerName
    {
        get { return _playerName; }
    }

    private void button1_Click(object sender, EventArgs e)
    {
        if (textBox1.Text != "" && comboBox1.SelectedIndex > -1)
        {
            _playerName = $"{textBox1.Text}{comboBox1.SelectedIndex}";
            MessageBox.Show(_playerName);
            this.DialogResult = DialogResult.OK;
            this.Close();
        }
        else
        {
            MessageBox.Show("Write your name and choose a color!");
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...