jyoteermoy Ответов: 2

Как проверить, открыта ли уже одна форма или нет в приложении c# windows


Всем привет,

Я разрабатываю одно приложение windows, используя приложение c# windows.Там я использовал родительскую форму MDI.Теперь я хочу предотвратить повторное открытие одной формы(например, form1), если она(например, form1) уже открыта. Как это сделать?

Спасибо

[no name]

Хороший вопрос.5!

Sergey Alexandrovich Kryukov

Открытая и закрытая форма, или форма, которая была открыта и остается видимой? Вы когда-нибудь закрывали эти бланки?
--СА

2 Ответов

Рейтинг:
7

VJ Reddy

Я думаю Application.OpenForms свойство может быть использовано для этой цели, как показано ниже

public bool IsFormOpen(Type formType){
    foreach (Form form in Application.OpenForms)
        if (form.GetType().Name == form.Name)
            return true;
    return false;
}

//Then to check and instantiate form1
if(!IsFormOpen(typeof (form1))
    //form1 is not open


Sergey Alexandrovich Kryukov

Это решение, мой 5, но я твердо верю, что если такая проверка необходима, значит, абсолютно плохой дизайн кода. Кроме того, если форма закрыта, она не может быть открыта снова. Правильный подход-перехватить FormClosing и скрыть его вместо этого, но... это все еще плохо по сравнению с одноформным подходом (стыковка, вкладки и т. д.). и использование ужасающего MDI неприемлемо почти во всех случаях. Зачем вообще это делать?
--СА

VJ Reddy

Спасибо, СА.
и хороший совет.

Рейтинг:
16

El_Codero

Привет,

попробуйте проверить открытые формы с помощью Application.OpenForms Свойство,возвращает все открытые формы и, если Form1 не находится в коллекции, вызывает новую.
http://msdn.microsoft.com/en-US/library/system.windows.forms.application.openforms.aspx[^]


С Наилучшими Пожеланиями


VJ Reddy

Хороший ответ. 5!

El_Codero

ха-ха, это точно описывает ваш код. также 5 для вас!

VJ Reddy

Спасибо, Бьерн.

Sergey Alexandrovich Kryukov

Это решение, мой 5, но я твердо верю, что если такая проверка необходима, значит, абсолютно плохой дизайн кода. Кроме того, если форма закрыта, она не может быть открыта снова. Правильный подход-перехватить FormClosing и скрыть его вместо этого, но... это все еще плохо по сравнению с одноформным подходом (стыковка, вкладки и т. д.). и использование ужасающего MDI неприемлемо почти во всех случаях. Зачем вообще это делать?
--СА

El_Codero

Спасибо, СА, хорошие моменты. МДИ с его поведением...это также довольно уродливо для меня.Согласитесь, tabcontrol предпочтительнее. Зачем вообще это делать?Я бы сказал, что в случае, когда несколько окон могут быть расположены в основных окнах (мониторинг), однако есть и более современные возможности ;).с уважением