Почему дочерняя форма MDI не отображается, когда я вставляю текстовое поле С#

Я создал Form1 и создаю дочернюю форму MDI - Form2. Состояние окна Form2 — развернуто в родительской форме.

Мой некоторый код:

bool IsOpen = false;
foreach (Form f in Application.OpenForms)
{
    if (f.Text == "Manage Model")
    {
        IsOpen = true;
        f.Focus();
        break;
    }
}

if (IsOpen == false)
{
    var fmodel = new formModel();
    fmodel.MdiParent = this;
    fmodel.WindowState = FormWindowState.Minimized;
    fmodel.Show();
    fmodel.WindowState = FormWindowState.Maximized;
}

// Close another forms
foreach (Form frm in this.MdiChildren)
{
    if (!frm.Focused)
    {
        frm.Visible = false;
        frm.Dispose();
    }
}

Форма2 пуста. Я попробовал меню щелчка программы, чтобы открыть форму 2. Она успешно показана.

Я вставил label1 в Form2 и открыл Form2. Он успешно показан.

но когда я вставил текстовое поле1 или кнопку1 в форму2 и открыл форму2, это не отображается. Это просто мерцание.

Запустить программу

Кто может сказать мне, почему это так? Спасибо.


person Meawmill    schedule 06.05.2020    source источник
comment
Когда вы добавляете что-то фокусируемое, оно получает фокус, а не его родитель, поэтому ваш собственный код немедленно закрывает форму, потому что у него нет фокуса.   -  person Damien_The_Unbeliever    schedule 06.05.2020
comment
Этот вопрос не имеет ничего общего с VB.NET. В описании тега VS говорится, что он предназначен для проблем с IDE, а не с кодом, написанным в VS. Не спамьте тегами.   -  person jmcilhinney    schedule 06.05.2020


Ответы (1)


Это не правильно:

f.Focus();

а так вот это:

if (!frm.Focused)
{
    frm.Visible = false;
    frm.Dispose();
}

Они должны быть:

f.Activate();

и:

if (frm != ActiveMdiChild)
{
    frm.Close();
}
person jmcilhinney    schedule 06.05.2020