如何在应用程序启动时正确显示“设置”窗口(在WinForms中)

本文关键字:窗口 设置 WinForms 显示 应用程序 启动 | 更新日期: 2023-09-27 18:31:40

要求

具有设置窗口(可通过菜单访问)的 WinForms 应用程序。最重要的是,在应用程序运行时,在显示应用程序的窗口之前,应首先显示设置窗口。(这会强制用户在每次运行应用程序时验证/修改设置)。

到目前为止我的实现

MainFormSettingsForm.SettingsForm有几个输入字段,这些字段在关闭窗口时保存在内部。MainForm中有一个菜单条目可以打开SettingsForm。为了显示SettingsForm(通过菜单项),我调用:

SettingsForm settingsForm = new SettingsForm();
settingsForm.Owner = this;
settingsForm.ShowDialog();

为了在显示MainForm之前显示SettingsForm,我在执行其他任何操作之前MainForm_Load()调用上述代码。

问题

在应用程序运行时,将显示SettingsForm。但是在2-3秒后,它冻结了。

SettingsForm是"静态的"。这意味着它的唯一操作是在关闭窗口时保存输入文件的值。

[编辑]该问题是由驻留在MainForm上的Timer产生的。因此,整体设计是可以的,可以作为有效的解决方案。

如何在应用程序启动时正确显示“设置”窗口(在WinForms中)

我的所有项目都有设置/用户登录屏幕。 我所做的防止这种情况是打开实际的主表单不可见,但在 FormLoad() 中,我调用显示对话框我需要输入的所有屏幕。 然后在检查所有对话框结果是否有效时,我让主窗体的 formload() 继续 通常剩下的就是对可能位于该主窗体上的仪表板元素应用过滤器,最后放回可见窗体。

我会补充一点,你应该使用不透明度而不是可见性,因为它会导致屏幕闪烁。 我注意到在普通的商用计算机上,它们非常慢,如果您在设计时将属性网格中的默认可见性设置为 visible = false,则在调用 formLoad() 时表单实际上会显示,但随后看到该属性并在之后变得不可见。 在带有视频卡的 1.8/2.0 GHz 计算机上,除非您在加载方法中加载了大量垃圾。我发现解决方法是将不透明度设置为 0。正如我从个人结果经验中看到的那样,在表单渲染之前将不透明度设置为 0(实际上并没有检查油漆和类似的东西的覆盖)。因此,如果需要在开始使用不透明度时不可见,我就停止使用可见性。