【问题标题】:Windows form design adviceWindows窗体设计建议
【发布时间】:2011-02-18 05:52:28
【问题描述】:

我已经使用 Windows 窗体构建了一个触摸屏应用程序。 效果很好,但我仍然想获得一些设计建议。

我的应用程序由几个不同的窗体组成。

我的设计是我有一个 MainForm,所有其他表单都继承自它。在这个 Mainform 中,我有用户可以选择打开哪个表单的按钮。 当用户选择其中一个选项时,会打开另一个表单。我使用以下代码:

Control control = this;                // the current form, that is open
Recording rec = Recording.Instance;    // the form that the user choose to open
if (control != rec) {
    rec.Show();                        // show the recording form 
    control.Hide();                    // hide the previous form
}

这是处理表单的正确方式还是应该使用其他方式?例如,其中包含一个表单和用户控件。

【问题讨论】:

    标签: c# winforms


    【解决方案1】:

    我注意到的一些事情:

    1. Recording.Instance。在我看来,您正在使这些表单成为单例。这可以工作,但我宁愿看到它们根据需要创建/关闭。
    2. rec.Show(); 这是一个挑剔的人,但很多时候你想以所有者的身份传递当前表单:rec.Show(this);rec.Show(control);
    3. 继承基本形式很好。为了使其更好地工作,还将每个表单构建为自定义控件,这样您的表单之间的唯一区别就是您添加了哪个自定义控件。您还可以为这些自定义控件中的每一个使用界面或通用基础控件,以进一步控制并在您的应用中强制实现统一的外观和感觉。

    【讨论】:

    • 感谢您的帮助,一些澄清:
      1
    • 感谢您的帮助,一些澄清:1)是的,我使用单例。我认为这将是最好的性能。这样我就不必一直创建和关闭表单。 2)这是什么原因? 3) 感谢您的提示
    • 对不起,我的文字混乱了,我还没弄清楚如何在 cmets 中做一个新行:)
    • Singleton 可能对性能没有多大帮助,实际上可能会伤害它,因为您必须在内存中保留一堆您不使用的旧表单。 #2 的原因是它设置了表单的所有者属性。它可以让您对子表单与父表单的关系做一些事情。
    【解决方案2】:

    此方法有效,但根据您的应用程序,您可能会遇到一些长期问题。

    潜在关注的主要领域是执行“control.Hide();”将控件的实例保留在内存中,只要您对此行为没问题。

    【讨论】:

    • 我故意使用了隐藏。在我看来,这将是更好的表现。我在这个应用程序中只有五个表格,没有一个“占用内存”。但我很高兴在这里什么是“正确的做法”。这现在有效,但可能不适用于未来的应用程序?
    • 5个表格,应该没问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多