1)
// Program.cs Application.Run(new Form1()); // Form1.cs Form2 form2 = new Form2(); form2.Show(); this.Hide();
2)
// Program.cs Form1 form1 = new Form1(); Form2 form2 = new Form2(); form1.Show(); form2.Show(); Application.Run();
…等等..
我不是在寻找像#1这样简单的一次性解决方案.我正在寻找最佳的表单管理实践.一个5-8种形式的应用程序,经常打开和关闭 – 什么是管理这些表单的最佳方法?
我的想法是使每个形式(懒惰?)Singleton并将它们埋在某种类型的FormsManager类中(如解决方案#2但是).然后单独的表单可能会调用像FormsManager.GetForm< WelcomeDialog>().
但是我想知道有哪些人使用更多的经验.再次,这些解决方案不应该是快速的黑客.他们应该是面向设计,也许是建筑和长期的解决方案.
编辑:
对于可能有同样麻烦的人来说,这是一个非常通用的问题(所以要求很开放).具体到我的情况,我不需要在启动时显示多种形式.此外,我没有MDI表单.我可能有一些模式,但它们大多是非模态的.
解决方法
我不认为单身形态适合表单管理.通常,您希望将一些上下文参数传递给窗体,您可能希望打开同一窗体的多个实例.所以单身人士不适合海事组织.
我认为表单管理应该很简单.
例如,如果你想从另一个表单中显示一个模态窗体,我会写一些非常简单的东西:
private void button1_Click(object sender,EventArgs e) { using (ModalForm1 frm = new ModalForm1(myParam)) { frm.ShowDialog(); if (frm.MyResultProperty == ...) { // Do some job here } } }
当然,您可以编写一些接口/泛型语法来避免一些代码重复,以防您想要显示大量的模态窗体:
public interface IFormResult<T> { T Result { get; set; } } public class ModalForm1 : Form,IFormResult<string> { public ModalForm1() { InitializeComponent(); this.Result = "My result"; } public string Result { get; set; } } private void button1_Click(object sender,EventArgs e) { string res = ShowModalForm<ModalForm1,string>(); } private static T2 ShowModalForm<T1,T2>() where T1 : Form,IFormResult<T2>,new() { using (T1 form = new T1()) { form.ShowDialog(); return form.Result; } }
但老实说,我觉得这有点过分了.
第二点:如果您的表单不完全遵循此特定行为(ShowDialog(),则会设置Result属性),那么您必须编写另一个Interface …等.
如果这种类型的语法(泛型,接口等)不会减少编写的代码行的数量或复杂性或可维护性(显然我们不能说这是真的这样),那么它很漂亮无用的海事组织
编辑:
表单管理真的取决于你的用例.
>如果您同时说20个可以显示的表单,那么您应该考虑一个FormManager概念(或者更好的是:考虑如何通过减少可能的打开表单的数量来改善用户体验)
>如果你有一些相对简单的东西(同时有2-3个模态窗体,可以使用3-4种可能的形式),那么我不会写复杂的代码来管理这些表单.
通常,用于启动应用程序的形式(即关闭时停止程序的形式,即Application.Run()的参数的形式)负责其他形式.你有一个主要形式,并且有多个子表单.如果你的情况真的不同,那么可能会有更聪明的东西来写,但这取决于你的情况.我不认为可以为形式管理的一般问题提供一般的好的答案.
老实说,如果你想要一些真正可维护的东西,尽量减少(尽可能地)同时显示的表单数量.多个显示的无模式表单在大多数情况下不会提供良好的用户体验,如果表单相互依赖,则形式的生命周期管理可能是有问题的.