Проблемы создания новой формы - PullRequest
1 голос
/ 19 июля 2009

В кнопке нажмите даже обработчик Form1, я хочу создать Form2. Вот мой код,

четный обработчик button1 Form1

// button1 belongs to Form1
private void button1_Click(object sender, EventArgs e)
{
    Form2 form2 = new Form2("www.google.com");
    form2.ShowDialog();
}

Form2 contructor

public Form2 (string str)
{
    InitializeComponent();
    address = str;
    button2.Text = str; // button2 belongs to Form2
}

public Form2()
{
    InitializeComponent();
}

Мой вопрос и проблема в том, что обработчик событий кнопки 1 выполняется потоком пользовательского интерфейса Form1, и если я создаю новую форму Form2 в потоке пользовательского интерфейса Form1 и использую поток пользовательского интерфейса для установки элемента пользовательского интерфейса Form2 (button2.Text), это законно? Насколько я понимаю, у каждой формы есть собственный поток пользовательского интерфейса, а элементы пользовательского интерфейса (например, кнопка) должны обрабатываться только потоком отдельного владельца форм? Если мой код неверен, то я буду признателен, если кто-нибудь покажет мне, как можно создать другую форму внутри обработчика событий текущей формы и передать параметры.

Я использую VSTS 2008 + C # + .Net 2.0.

Ответы [ 6 ]

6 голосов
/ 19 июля 2009

Ваш код в порядке. Обе формы будут жить в одном потоке и могут обращаться друг к другу, не беспокоясь о потоке. В этом случае новые темы не создаются, если вы специально не говорите об этом.

В качестве примечания я бы хотел немного изменить ваш конструктор Form2. Я предполагаю, что Form2 также имеет конструктор по умолчанию без параметров, и что этот конструктор также вызывает InitializeComponent? Если это так, нет необходимости дублировать этот вызов в вашем конструкторе; если вы настроите его так, он сначала запустит конструктор по умолчанию, а затем вы добавите свой собственный материал:

public Form2 (string str) : this()
{
    address = str;
    button2.Text = str; // button2 belongs to Form2
}
2 голосов
/ 19 июля 2009

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

1 голос
/ 19 июля 2009

Все формы будут выполняться в одном потоке (если вы не запустили новый поток и не создали форму в этом потоке).

1 голос
/ 19 июля 2009

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

1 голос
/ 19 июля 2009

И вторая форма будет использовать ту же нить, что и форма1

1 голос
/ 19 июля 2009

Это законно и должно работать нормально.

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