C # Использование нескольких форм - PullRequest
1 голос
/ 16 января 2010

У меня есть приложение, которое имеет 2 формы. Когда я нажимаю кнопку в форме 2, я хочу, чтобы она могла изменять текст в форме 1:

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

    private void button1_Click(object sender, EventArgs e)
    {
        Form1.label1.Text = "Fred";
    }
}

Компилятор выдает ошибку

Как мне это сделать?

Ответы [ 2 ]

8 голосов
/ 16 января 2010

Вы путаете формы и экземпляры форм. Форма - это просто класс. Когда отображается Form1, то, что отображается, является экземпляром класса Form1. Когда отображается форма Form2, отображается экземпляр формы Form2.

Вы пытаетесь использовать

Form1.label1.Text = "Fred";

Но вы можете установить только поле или элемент экземпляра . Вы имеете в виду класс"Form1".

Вам нужны две вещи. Я предполагаю, что Form2 запускается с кнопки на Form1. Добавьте конструктор в Form2, который принимает экземпляр Form1:

private Form1 _starter;
public Form2(Form1 starter) : this()
{
    _starter = starter;
}

Затем добавьте в форму Form1 свойство, предоставляющее текст метки: не предоставляйте непосредственно элементы управления - только данная форма должна знать, какие элементы управления на ней:

public string LabelText
{
    get {return label1.Text;}
    set {label1.Text = value;}
}

Тогда Form2 установит это свойство:

private void button1_Click(object sender, EventArgs e)
{
    _starter.LabelText = "Fred";
}
3 голосов
/ 16 января 2010

Вы, вероятно, запускаете экземпляр Form2 из экземпляра Form1, например:

Form2 f2 = new Form2();
f2.Show();

В этом случае вы можете изменить текст в f2 экземпляре Form2 следующим образом:

f2.label1.Text = "new text";

Обратите внимание, что вам нужно будет сделать label1 открытым полем (не очень хорошая практика) или инкапсулировать его, используя свойство. Надеюсь, это поможет.

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