В описанной ситуации вы хотите вернуть исходный экземпляр. Вы использовали this.hide
, чтобы скрыть форму.
Очевидно, что вы не хотите создавать новый экземпляр, поскольку он тратит ресурсы; вам нужно сохранить исходный экземпляр где-нибудь, где вы можете получить его из дочерней формы.
Есть несколько способов сделать это, но я бы вероятно, принять один из двух подходов:
Singleton:
магазина вашей основная форма в одноэлементном, так что, когда вам нужно, чтобы получить его назад вы можете ссылаться на хранимый экземпляр, а не на то, чтобы повторно запускать другой экземпляр.
public static class GlobalForms
{
private MainForm _main;
public MainForm Main
{
get
{
if (_main == null) _main = new MainForm();
return _mainForm;
}
}
}
Теперь, когда вы хотите MainForm, вместо того, чтобы вводить его в ноль, вы ссылаетесь на синглтон.
Form mainInstance = GlobalForms.Main
mainInstance.Show();
//Do any other stuff for your main form.
this.Hide(); //Or this.Close();
Это ленивый загружен, поэтому он не будет создавать экземпляр главной формы, пока не потребуется его в первый раз. После этого он будет удерживаться до тех пор, пока вы не будете нуждаться в нем снова, если вы не избавитесь от него, и в этом случае цикл начнется снова.
Открытие второй формы, как ребенок из первого:
Form otherForm = new OtherForm();
otherForm.Show(this); //This sets up the main form as the owner of this one for this call
this.Hide();
В качестве альтернативы, если вы хотите OtherForm открыт как модальный диалог (т.е. вы не можете взаимодействовать с другими окнами, в то время как это один открыт) , а затем сделать otherForm.ShowDialog(this);
И от OtherForm:
this.Owner.Show();
this.Close();
В качестве альтернативы, Stan R обсудил a neat idea using an event handler to catch the close event of the child form. Хотя это может потенциально стать сложным, если у вас есть несколько форм, открывающих вашу дочернюю форму, поэтому, если эта форма является общим диалогом для многих форм, этот подход следует использовать с осторожностью.
Вы также можете получить доступ к коллекции Application.OpenForms, чтобы получить формы, которые в настоящее время открыты в вашем приложении. Вам нужно будет знать индекс формы, которую вы хотите активировать.
Каждый подход имеет свои недостатки.Естественно, маршрут, который вы берете, будет дополнять остальную часть вашей архитектуры и дизайна, чтобы ваш код поддерживался.
Программное обеспечение FieldProgrammingSoftware не существует в текущем пространстве имен. – 2010-01-12 19:54:07