Вы оставляете его открытым, устанавливая ShowInTaskbar в значение false перед тем, как ShowDialog ();
private void Form1_Load(object sender, EventArgs e)
{
Form2 newForm = new Form2();
Button b = new Button();
newForm.Controls.Add(b);
b.Click += new EventHandler(click);
this.Show();
// add this line of code...
newForm.ShowInTaskbar = false;
newForm.ShowDialog();
}
private void click(object sender, EventArgs e)
{
((Form)((Control)sender).Parent).ShowInTaskbar = false;
}
Или просто не делайте вторую форму модальной. Это работает также.
private void Form1_Load(object sender, EventArgs e)
{
Form2 newForm = new Form2();
Button b = new Button();
newForm.Controls.Add(b);
b.Click += new EventHandler(click);
this.Show();
newForm.Show();
}
Я не знаю конкретного механизма здесь, но ясно, что происходит то, что изменение флага (который фактически изменяет один или несколько стилей окна WS_EX_xxx) приводит к выходу из режима модального насоса ShowDialog (). Это, в свою очередь, заставляет вас (наконец-то!) Выйти из Form1_Load, и тогда ваша newForm выходит из области видимости и уничтожается.
Итак, ваша проблема - это сочетание ShowDialog () и тот факт, что вы не готовы к тому, что ShowDialog () завершится.
Теперь модал не должен отображаться с иконкой на панели задач, в действительности должен быть только 1 значок на панели задач для приложения и все его модальных форм, поскольку при модальной форме работает, главная форма все равно отключена. Когда основная форма свернута, все принадлежащие ей модальные формы будут скрыты и т. Д.
Так что, если вы действительно хотите, чтобы эта вторая форма была модальной, вы не должны давать пользователю возможность давать ей значок на панели задач. Если использование ShowDialog () было просто тестовым кодом, не беспокойтесь об этом. Проблема исчезнет, когда форма будет запущена на главном насосе приложения.