Как остановить форму окна, чтобы вновь открывать по клику с помощью C #? - PullRequest
0 голосов
/ 19 мая 2011

Я использую форму окна MDIParent, которая содержит меню, когда я снова нажимаю на это же меню, открывается новое окнотак как помешать этому открыть окно, если оно уже открыто?Он не должен отображать форму окна каждый раз при нажатии.

Ответы [ 4 ]

2 голосов
/ 19 мая 2011

Использование Application.OpenForms свойство.

Boolean found = 
   Application.OpenForms.Cast<Form>().Any(form => form.ID == "TargetFormID"

if (!found) 
{ 
    // Open a new instance of the form //
}
1 голос
/ 19 мая 2011

2 способа:

Путь 1, флаги:
Сохраните флаг (или список флагов) для открытых форм.
Каждый раз, когда вы открываете форму (создаете новую ()), установите флаг в значение «true».
Когда форма закроется, установите флаг в false.
В событии нажатия кнопки установите флажок, чтобы увидеть, открыта ли форма, прежде чем создавать новую.

Способ 2, сохранить ссылку:
В основной форме сохраняйте ссылку на все формы, которые вы используете.
Инициализируйте их как ноль, когда формы не открыты.
При открытии новой формы установите ссылку на нее.
Перед созданием новой ссылки на событие нажатия кнопки проверьте, является ли ссылка формы пустой.

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

0 голосов
/ 19 мая 2011

Еще одна причина заключается в создании Property в Form, который сохраняет используемый вами экземпляр по умолчанию.

private static Form _defaultInstance;
public static Form DefaultInstance()
{
    get {
        if(_defaultInstance == null || _defaultInstance.IsDisposed)
        {
            _defaultInstance = new yourTypeHere();
        }

        return _defaultInstance;
    }
}

И теперь вы всегда получаете доступ к окну через это свойство:

yourTypeHere.DefaultInstance.Show();
0 голосов
/ 19 мая 2011

Вы можете сохранить список открытых форм (и проверить список в событии onClick) или отключить / включить пункт меню, когда форма открыта или закрыта.

...