2016-12-09 2 views
0

Я создаю приложение C#. Я новичок в .NET-программировании. Это в основном большое приложение Windows Forms, которое отображает различные формы, все взаимосвязанные друг с другом на основе пользовательского контроля. Моя основная форма - это страница входа в систему, чтобы подтвердить, что пользователь переходит к форме меню (вторая форма), где есть варианты для пользователя. Таким образом, основная деятельность начинается с формы меню (вторая форма), она содержит ярлык с именем пользователя. Из формы меню (вторая форма) она переходит в третью форму, которая является всплывающей формой, что приводит к четвертой форме. В основном, скрыть вторую форму при перемещении в каждую форму. Теперь из четвертой формы я хочу вернуться к форме меню (вторая форма), не создавая новый экземпляр. Я пытался сделать это без новых примеров, но не повезло. Смотрите ниже код:Приложение с несколькими формами GUI C#

второй формы (меню):

private void button_Click(object sender, EventArgs e) 
{ 
    PopUp form3 = new Popup(); 
    form3.Show(); 

    // Hides the Menu Form(second form) 
    this.Hide(); 
} 

Третья форма:

private void button_Click(object sender, EventArgs e) 
{  
    var menu = new Menu(); 
    menu.Hide(); 

    // Hide Form #3 
    Hide(); 
    form4.Show(); 

    // Hide Form #3 
    Close(); 
} 

Четвертая форма:

private void button_Click(object sender, EventArgs e) 
{ 
    if(grpSaved == false) 
    { 
     Form5 form5 = new Form5(); 
     form5.Show(); 
     form5.FormClosed += new FormClosedEventHandler(unsaved_FormClosed);    
     grpSaved = true; 
    } 
    else 
    { 
     var menu = new Menu(); 
     Close();//closes fourth form 

     menu.Show(); 
    } 
} 

Этот код создает новый экземпляр формы меню (вторая форма). Пожалуйста, помогите мне обойти эту проблему.

+1

Если третья и четвертая формы являются всплывающими, не скрывайте вторую форму. Вместо этого используйте 'ShowDialog', чтобы отобразить третью форму как всплывающее окно. Затем, когда третья форма закрывается, управление возвращается во вторую форму, чтобы делать все, что в ней нуждается. –

ответ

0

Если вы нажмете кнопку или установите флажок для доступа к третьей и четвертой формам, попробуйте использовать диалоговое окно show вместо новой формы, а затем разместите это.(); после диалога показа, чтобы убедиться, что когда открытая форма закрыта, она вернет вас в форму, из которой вы ее открыли.

Пример:

Вместо:

PopUp form3 = new Popup(); 
    form3.Show(); 
    //hides the second (Menu) form 
    this.Hide(); 

Try:

//Hide the second form 
this.Hide(); 
//Bring up your PopUp form 
using (PopUp form3 = new PopUp()) 
    form3.ShowDialog(); 
//When your PopUp form closes the code should continue and show the second form again. 
this.Show(); 

Так, чтобы стек формы попробовать следующее:

//Menu Form 
private void button_Click(object sender, EventArgs e) 
{ 
this.Hide(); 
using(PopUp form3 = new Popup()) 
    form3.ShowDialog(); 
this.Show(); 
} 

//PopUp Form 
private void button_Click(object sender, EventArgs e) 
{ 
    this.Hide(); 
    using(Task form4 = new Task()) 
     form4.ShowDialog(); 
    this.Close();  
} 

//Task Form 
private void button_Click(object sender, EventArgs e) 
{ 
    this.Close(); 
} 

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

Это чистое решение, за исключением того, что оно по сути не сохраняет данные из двух других форм. При повторном нажатии кнопки на странице меню появится новая форма PopUp.

+0

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

+0

Приложение работает в форме входа: – user7274707

+0

частный аннулируются click_Click (объект отправителя, EventArgs е) { если ((user.Text == имя пользователя) && (pswd.Text == пароль)) { меню Menu = новое меню (); menu.Username = пользователь.Текст; // скрывает регистрационную форму this.Hide(); menu.ShowDialog(); } – user7274707

Смежные вопросы