Как вывести дочернюю форму MDI на передний план?

Обзор:

У меня есть родительская форма MDI, в которую я загружаю другие формы. После загрузки второй формы я больше не могу вывести первую на передний план.

Описание:

В родительской форме у меня есть полоса меню, содержащая 2 пункта меню; Главная и Поиск. Каждое событие клика загружает соответствующую форму, если указанная форма еще не загружена.

Проблема:

а. Нажмите "Поиск". Затем нажмите Главная.

b. Если нажать кнопку "Поиск" еще раз, соответствующая уже открытая форма больше не будет отображаться на переднем плане.

    private void tsmHome_Click(object sender, EventArgs e)
    {
        // Loop through all open forms...
        foreach (Form form in Application.OpenForms)
        {
            // If frmHome is Opened, set focus to it and exit subroutine.
            if (form.GetType() == typeof(frmSearch))
            {

                form.Activate();
                return;
            }
        }

        // If frmHome is not Opened, create it. 
        frmHome f = new frmHome();
        f.MdiParent = this;
        f.Show();
    }

    private void tsmSearch_Click(object sender, EventArgs e)
    {
        // Loop through all open forms...
        foreach (Form form in Application.OpenForms)
        {
            // If frmSearch is Opened, set focus to it and exit subroutine.
            if (form.GetType() == typeof(frmSearch))
            {

                form.Activate();
                return;
            }
        }

        // If frmSearch is not Opened, create it. 
        frmSearch f = new frmSearch();
        f.MdiParent = this;
        f.Show();
    }

person suchislife    schedule 12.12.2014    source источник
comment
Похоже, что если я закомментирую //return; Однако он работает по назначению, создавая новые формы того же типа. Мысли?   -  person suchislife    schedule 12.12.2014
comment
Грант, как на самом деле. Я просто хочу, чтобы пользователь щелкнул элемент меню, и его соответствующая, уже открытая форма была выведена на передний план.   -  person suchislife    schedule 12.12.2014
comment
Я просто хотел сказать, что ненавижу твое имя. Вот и все. ;)   -  person Idle_Mind    schedule 12.12.2014


Ответы (3)


Ваш код работает для меня.. После изменения одной строки в вашем обработчике событий tsmHome_Click

Ты имел.

if (form.GetType() == typeof(frmSearch))

Должен быть.

if (form.GetType() == typeof(frmHome))

Похоже, у вас возникла ошибка копирования и вставки.

person Mark Hall    schedule 12.12.2014
comment
Вторая пара глаз может помочь. :) - person Mark Hall; 12.12.2014

Вы можете попробовать несколько вариантов:

f.TopMost = true;
f.BringToFront();

Также вы можете открыть окно в диалоговом режиме:

f.ShowDialog();

Надеюсь, это поможет. С наилучшими пожеланиями,

person Alexander Bell    schedule 12.12.2014

Вы можете изменить код на это, если форма существует, выведите ее на передний план.

   // Loop through all open forms...
    foreach (Form form in Application.OpenForms)
    {
        // If frmSearch is Opened, set focus to it and exit subroutine.
        if (form.GetType() == typeof(frmSearch))
        {

            form.Activate();
            form.BringToFront();
            //form.WindowState = FormWindowState.Maximized;
            return;
        }
    }

    // If frmSearch is not Opened, create it. 
    frmSearch f = new frmSearch();
    f.MdiParent = this;
    f.Show();
person Spire.Doc Free Word API    schedule 12.12.2014