在Visual Basic中,保存窗体状态(大小、位置、字段值)在会话之间的主要任务是,在关闭时将数据写入外部来源(文件、注册表、用户设置),并在启动时恢复。
方法:
My.Settings的使用示例:
' 保存状态 Private Sub Form1_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing My.Settings.WindowLocation = Me.Location My.Settings.WindowSize = Me.Size My.Settings.Save() End Sub ' 恢复状态 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load If Not My.Settings.WindowSize.IsEmpty Then Me.Size = My.Settings.WindowSize End If If Not My.Settings.WindowLocation.IsEmpty Then Me.Location = My.Settings.WindowLocation End If End Sub
通过设计器或手动添加设置。
细节:
是否可以通过My.Settings保存非标准对象(例如DataTable)?如何正确实现?
答案: 可以,但设置必须是用户类型,并且对象必须支持序列化。对于DataTable或复杂对象,My.Settings保存的是序列化的二进制/XML形式。需要实现序列化支持或通过序列化器进行手动写入。
故事
在应用程序中将窗体状态保存到Windows注册表。经过某些更新后,用户由于权限限制无法访问设置,引起大量支持请求。解决方案是转向用户配置文件中的My.Settings。
故事
在启动时未检查窗口位置的坐标,导致应用程序显示在屏幕的不可见区域(第二个监视器改变)。现在在恢复窗体位置时添加了检查桌面边界的逻辑。
故事
在从旧版本应用程序更新时,开发人员未确保用户设置(嵌套字段的表单)的迁移。结果是数据丢失和用户不满。制定了支持设置版本迁移并控制兼容性的政策。