我想知道我是否做得正确.
我在我的类(也是一个表单)中实例化一个Form(让我们调用这个Form_B)并处理Form_B的Load事件.在这个事件中我做了一些初始化.
Form_B可以由用户多次显示,我在我的实例变量上调用ShowDialog.
问题是每次显示表单时都会调用Load.我尝试过调试,并尝试使用Show()而不是ShowDialog().Show()因关闭窗口而失败,但ShowDialog()没有失败,但每次显示时都调用Load.
表单关闭后继续使用实例是否不正确?
谢谢,斯特凡
Han*_*ant 10
使用Load事件来初始化表单是VB6时代的一个时代错误.当时非常重要,不幸的是,Winforms设计师的设计延续了这一点.它使Load成为表单的默认事件.
然而,这不是.NET方式,您使用构造函数初始化类对象.您需要覆盖OnLoad()(另一种.NET方式,事件是其他类中的代码)的唯一时间是您关心表单的大小和位置.当用户更改Windows主题或以更高的DPI设置运行视频适配器时,它将不是设计大小和位置.因此,您可能希望使用OnLoad移动窗口或重新排列控件.实际上并不常见.
因此,首先使用构造函数来修复问题.如果你仍然需要OnLoad,那么只需使用一个bool标志来跟踪它是否已经运行.
private bool initialized = false;
protected override void OnLoad(EventArgs e) {
if (!initialized) {
initialized = true;
// etc...
}
base.OnLoad(e);
}
Run Code Online (Sandbox Code Playgroud)
是的,只有在使用ShowDialog()时才有效.使用Show()显示的表单在关闭时会自动处理.使用ShowDialog()不会发生这种情况,以避免检索对话框结果时出现问题.重新创建对话框实例是更好的方法,除非您真的关心保留最后输入的值.然而,这是一种非常昂贵的方式,表单对象占用了大量的.NET和Windows资源.
| 归档时间: |
|
| 查看次数: |
6883 次 |
| 最近记录: |