Как проверить из дочерней формы, запущена ли другая форма в родительском MDI? - PullRequest
1 голос
/ 28 декабря 2011

У меня есть форма MDI. Я хочу проверить в работающем дочернем элементе этой формы, запущена ли другая форма. Что-то вроде:

    if (this.MdiParent.MdiChildren.Contains(MyForm2))
    {
        //Do Stuff
    }

Где MyForm2 - имя (имя класса) для формы, которую я ищу. Компилятор говорит что-то вроде «Имя класса недопустимо на данный момент».

Как это сделать правильно? Обратите внимание, что у меня может быть несколько экземпляров «MyForm2», запущенных в этот момент (ну, с разными именами экземпляров!)

Ответы [ 2 ]

2 голосов
/ 28 декабря 2011

Вам необходимо проверить тип каждого ребенка.

Например, вы можете использовать ключевое слово is ( больше информации ), чтобы определить, является ли ребенок правильным типом:

if (this.MdiParent.MdiChildren.Any(child => child is MyForm2))
{
}

Метод .Any() требует ссылки на System.Linq. Узнать больше о Any ()

2 голосов
/ 28 декабря 2011

Просто создайте цикл для циклического перемещения по коллекции MdiChildren, чтобы увидеть, существует ли какая-либо форма указанного типа. Contains требует определенного экземпляра для возврата действительных данных:

        foreach (var form in this.MdiParent.MdiChildren)
        {
            if (form is MyForm2)
            {
                // Do something. 

                // If you only want to see if one instance of the form is running,
                // add a break after doing something.

                // If you want to do something with each instance of the form, 
                // just keep doing something in this loop.
            }
        }
...