Предотвратить множественные экземпляры формы - PullRequest
6 голосов
/ 01 февраля 2010

Как предотвратить открытие нескольких форм?

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

Ответы [ 5 ]

2 голосов
/ 01 февраля 2010

сделать что-то вроде:

SingleForm myform = null;

void ShowMyForm_Click(object sender, EventArgs e) 
{     if (myform == null)
       {
             myform = new SingleForm();  
        } 
       myform.Show();
       myform.BringToFront(); 
 }
2 голосов
/ 01 февраля 2010

Два варианта, в зависимости от того, что вам нужно:

  1. Используйте ShowDialog вместо Show, что откроет модальное окно. Это очевидное решение, если вам не нужна ваша основная форма, когда активна дочерняя форма.

  2. Или следите за окном, которое вы уже открыли в основной форме, и ничего не делайте, если оно уже открыто. Это понадобится, если вы хотите, чтобы пользователь мог использовать основную форму, когда дочерняя форма уже открыта, возможно, для открытия других форм.

1 голос
/ 01 февраля 2010

Заставьте ваш объект формы придерживаться шаблона синглтона

0 голосов
/ 01 февраля 2010

Я предпочитаю использовать Generics и ленивую загрузку для обработки моих форм. Поскольку все мои формы наследуются от базового класса, я могу использовать один и тот же метод, чтобы вывести формы на передний план, отправить их на задний план, уничтожить их, запустить их и т. Д.

Если у вас есть класс диспетчера форм, который отвечает за управление любыми загруженными формами, вы можете вывести любую форму вперед, если захотите, или запретить возвращение определенных форм, если не выполнены определенные критерии.

public void LoadForm<T>() where T : MyNameSpace.MyBaseForm 
{
    // Load all your code in this joint and just call it when you
    // need a form. In here, you can determine if a copy of the form
    // already exists and then bring it forward or not
} 
0 голосов
/ 01 февраля 2010

Отключите основную форму, пока дочерняя форма не исчезнет, ​​или отключите кнопку.

button_onClick(object Sender, EventArgs e)
{
   Button   btn = sender as Button;
   btn.Enabled = false;
   Form myform = new MyForm();
   myform.Show();
}

Конечно, вы действительно должны использовать form.ShowDialog() вместо form.Show(), если хотите модальное поведение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...