препятствование нескольким инстанцирует одной формы отобразиться

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

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

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

private void heToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Form help = new help();
            help.Show();
        } 
7
задан Brodie 7 January 2010 в 04:51
поделиться

5 ответов

Используйте одну кнопку:

class HelpForm : Form
{
   private static HelpForm _instance;
   public static HelpForm GetInstance()
   {
     if(_instance == null) _instance = new HelpForm();
     return _instance; 
   }
}

.......

private void heToolStripMenuItem_Click(object sender, EventArgs e)
{
     HelpForm form = HelpForm.GetInstance();
     if(!form.Visible)
     {
       form.Show();
     }
     else
     {
       form.BringToFront();
     }
}
10
ответ дан 6 December 2019 в 07:50
поделиться

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

  1. Используйте Однотонный шаблон с глобальным замком отслеживания, который освобождается, когда форма находится в состоянии вызова
  2. Управление состоянием в вызывающей форме, и просто вызовите "show", если форма уже была запущена.
  3. Предварительно запустите форму, но не показывайте ее, таким образом вы управляете одной ссылкой и просто показываете ее по мере необходимости
2
ответ дан 6 December 2019 в 07:50
поделиться

В качестве альтернативы Вы можете использовать открытые формы приложения, чтобы посмотреть, открыто ли оно

btn_LaunchHelp(object o, EventArgs e)
{

   foreach (Form f in Application.OpenForms)
   {
       if (f is HelpForm)
       {
           f.Focus();
           return;
       }
   }

   new help().Show();
}

Edit: Для большей ясности, это позволяет пользователю закрыть Справку в любое время и делает это намного проще в управлении, чем сохранение ссылки на окно Справки. Ничего не нужно чистить, ничего не нужно обслуживать.

13
ответ дан 6 December 2019 в 07:50
поделиться

Попробуйте сделать вашу помощь глобальной.

private Form help;

private void heToolStripMenuItem_Click(object sender, EventArgs e)
        {
        if(help == null)
          help = new help();

        help.Show();
    }
-3
ответ дан 6 December 2019 в 07:50
поделиться

вы рассмотрели создание формы MDI? Это гарантирует, что ваша родительская форма всегда видима, и ваши дочерние формы содержатся в родителе. Затем вы должны только обойти свой список форм и Шоу вызова на них. Никаким одиночным элементам не было нужно (который многие считают плохой практикой программирования так или иначе).

-1
ответ дан 6 December 2019 в 07:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: