2015-12-30 3 views
0

Я разрабатываю приложение C# (compact framework), и мне нужно иметь 3 формы. Я могу перейти от form1 (main) к form2 и из формы1 в form3. Я также хочу иметь возможность переключаться с формы2 на form3. Form3 должен быть всегда одинаковым (мне нужно создать его, когда приложение запустится и закроет его, когда приложение закончится).Переключение между несколькими формами в C#

На Form1, на "Go форме 2" Кнопка

form2.Show(); form2.BringToFront(); 

На Form1, на "Перейти к форме 3" Кнопка

form3.Show(); form3.BringToFront(); 

На form2, на "Назад форме 1"

this.Hide(); 

на Form3, на "Назад форме 1"

this.Hide(); 

Но как переключиться с формы2 на форму3?

Благодарим за помощь!

ответ

0

Спасибо за все взносы! Я закончил создание гибкого решения, которое можно распространить на многие формы.

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

static class GlobalClass 
{ 
    private static int m_currentActiveForm = 1; 

    public static int currentActiveForm 
    { 
     get { return m_currentActiveForm; } 
     set { m_currentActiveForm = value; } 
    } 
} 

On form1 Я включил таймер, который проверяет каждые 100 мс var currentActiveForm. Когда обнаружено изменение, отображается соответствующая форма.

private void timer2_Tick(object sender, EventArgs e) 
    { 

     if (GlobalClass.currentActiveForm != lastActiveForm) 
     { 
      switch (GlobalClass.currentActiveForm) 
      { 
       case 1: 
        form2.Hide(); 
        form3.Hide(); 
        this.BringToFront(); 
        break; 
       case 2: 
        form2.Show(); 
        form2.BringToFront(); 
        break; 
       case 3: 
        form3.Show(); 
        form3.BringToFront(); 
        break; 
      } 
     } 
} 

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

+0

Извините, но этот ответ заставляет мои глаза кровоточить. Я не вижу причин для таймера. Создайте класс FormManager, который создает и владеет всеми формами. Дайте ему методы, называемые SwitchToOne, SwitchToTwo и т. Д., И разместите там свою форму и спрячьте код. – tcarvin

+0

Как я могу это сделать? –

+0

Поддерживает ли Compact Framework использование класса, наследуемого из [ApplicationContext] (https://msdn.microsoft.com/en-us/library/system.windows.forms.applicationcontext (v = vs.110) .aspx)? Один [пример] (https://stackoverflow.com/a/13407161/111794) и другой [пример] (https://stackoverflow.com/a/13407161/111794). –

0

Я думаю, что здесь есть решение для нескольких частей.

  1. Во-первых, если ваша форма 3 является «глобальной» формой и не должна быть повторно создана, то вы должны сохранить ее как статическую внутреннюю переменную где-то для удобства.
  2. Когда form1 открывает форму2, вы должны зацепить событие FormClosed.
  3. В форме2, когда пользователь нажимает кнопку (или что-то еще), закрывает форму2.
  4. В обработчике событий, для FormClosed, перейдите в глобальную форму3.
-1

На form2, нажмите кнопку "Перейти к форме 3" Кнопка

form3.Show(); 

На Form3, нажмите кнопку "Назад, чтобы сформировать 2" Кнопка

this.Hide();