Проблема формы C #: новая форма теряет контроль и случайно скрывается - PullRequest
1 голос
/ 16 ноября 2009

Я сталкиваюсь со странным поведением с формами в приложении c # 3.5. При нажатии кнопки моя форма 1 скрывается, создает новую форму 2 и показывает форму 2. Form1 также содержит метод события, запускаемый при закрытии form2. Вот код внутри Form1:

Form2 form2;

void button1_Click(object sender, EventArgs e)
    {           
        this.Hide();
        form2 = new form2();
        form2.Show();
        form2.FormClosed += new FormClosedEventHandler(form2_FormClosed);               
    }

void form2_FormClosed(object sender, FormClosedEventArgs e)
    {
        form2.Dispose();
        form2 = null; 
        this.Show();  
    }

Теперь моя проблема в том, что иногда, когда я открываю form2 (скрывая form1), или когда я закрываю form2 (показывая form1), новая форма появляется на экране на мгновение и затем прячется. Он все еще открыт, и я могу щелкнуть его на панели задач, чтобы снова показать его, но само окно отправляется за любыми другими открытыми окнами. Похоже, что он открывается, но минимизируется мгновенно.

Такое поведение происходит случайно. Иногда формы открываются и прячутся без проблем, но иногда они теряют фокус на другом окне. Я пытался использовать focus (), activ () и topmost, но все они не смогли предотвратить внезапное скрытие.

Кто-нибудь знает, почему это происходит и как это исправить?

Спасибо.

1 Ответ

1 голос
/ 16 ноября 2009

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

void button1_Click(object sender, EventArgs e)
{           
    form2 = new form2();
    form2.Show();
    form2.FormClosed += new FormClosedEventHandler(form2_FormClosed);               
    this.Hide();  // Moved
}
...