要求
具有设置窗口(可通过菜单访问)的WinForms应用程序。最重要的是,在应用程序运行时,在显示应用程序窗口之前,应首先显示设置窗口。 (这会强制用户在每次运行应用程序时验证/修改设置。)
到目前为止我的实施
拥有MainForm
和SettingsForm
。 SettingsForm
有几个输入字段,在关闭窗口时会在内部保存。 MainForm
中有一个菜单条目可以打开SettingsForm
。为了显示SettingsForm
(通过菜单条目),我打电话:
SettingsForm settingsForm = new SettingsForm();
settingsForm.Owner = this;
settingsForm.ShowDialog();
为了在显示SettingsForm
之前显示MainForm
,我会在MainForm_Load()
之前调用上述代码,然后再做其他事情。
问题
在应用程序运行时,会显示SettingsForm
。但是2-3秒后,它会冻结。
SettingsForm
是“静态的”。这意味着它唯一的作用是在关闭窗口时保存输入文件的值。
[编辑]
该问题是由位于Timer
的{{1}}生成的。因此,整体设计是可以的,可以作为有效的解决方案。
答案 0 :(得分:0)
我的所有项目都有设置/用户登录屏幕。我要做的是防止这是打开实际的主窗体隐形但在FormLoad()我调用show对话框我需要输入的所有屏幕。然后在检查所有dialogresult它们是否有效时,让主窗体的formload()继续通常所有剩下的是在可能在该主窗体上的仪表板元素上应用过滤器,最后放回可见的窗体。
我还要添加你应该使用不透明度而不是可见性,因为它会导致屏幕闪烁。我注意到平均商业计算机上它们非常慢,如果你在设计时将属性网格中的默认可见性设置为visible = false,那么当调用formLoad()时表单实际显示但是然后看到该属性并且在看不到之后变为不可见。在带有视频卡的1.8 / 2.0 ghz计算机上,除非你在加载方法中加载垃圾,否则你看不到这么多。我发现一个解决方法是将不透明度设置为0.在表单渲染之前设置opacity为0,因为我可以从个人结果体验中看到(实际上没有检查绘制上的覆盖和类似的东西)。所以如果在开始使用不透明度时需要隐身,我就停止使用可见性。