c# – 多表单应用程序的最佳做法,以显示和隐藏表单?

前端之家收集整理的这篇文章主要介绍了c# – 多表单应用程序的最佳做法,以显示和隐藏表单?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
StackOverflow有很多问题,询问如何隐藏Form1并显示Form2.通常,几个不同的答案出现:

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()的参数的形式)负责其他形式.你有一个主要形式,并且有多个子表单.如果你的情况真的不同,那么可能会有更聪明的东西来写,但这取决于你的情况.我不认为可以为形式管理的一般问题提供一般的好的答案.

老实说,如果你想要一些真正可维护的东西,尽量减少(尽可能地)同时显示的表单数量.多个显示的无模式表单在大多数情况下不会提供良好的用户体验,如果表单相互依赖,则形式的生命周期管理可能是有问题的.

猜你在找的C#相关文章