VB.NET编程动态创建窗体设置及程序关闭时数据保存方法问询
在VB.NET中动态创建窗体设置并在关闭时保存数据的实现方法
当然可行!我来一步步给你拆解这两个需求的实现方法:
一、动态创建自定义名称的设置项
VB.NET的应用程序设置系统不仅支持设计时定义的强类型设置,还允许我们动态添加用户范围的设置项。下面是点击按钮时,创建以TextBox1文本为名称的设置的具体代码:
Private Sub btnCreateSetting_Click(sender As Object, e As EventArgs) Handles btnCreateSetting.Click ' 先校验输入的设置名称是否有效 If String.IsNullOrWhiteSpace(TextBox1.Text) Then MessageBox.Show("请输入有效的设置名称哦!") Return End If Dim settingName As String = TextBox1.Text Dim initialValue As String = "默认内容" ' 这里可以替换成你需要的初始值,也可以绑定其他控件的内容 ' 检查该设置是否已存在,避免重复创建 If Not Properties.Settings.Default.Properties.Cast(Of SettingsProperty).Any(Function(p) p.Name = settingName) Then ' 构建新的设置属性 Dim newSetting As New SettingsProperty(settingName) newSetting.PropertyType = GetType(String) ' 设置数据类型,支持String、Integer等常用类型 newSetting.DefaultValue = initialValue newSetting.IsReadOnly = False ' 设置为可读写 newSetting.Provider = Properties.Settings.Default.Providers("LocalFileSettingsProvider") ' 标记为用户范围设置(每个用户独立存储) newSetting.Attributes.Add(GetType(UserScopedSettingAttribute), New UserScopedSettingAttribute()) ' 将新设置加入集合并保存 Properties.Settings.Default.Properties.Add(newSetting) Properties.Settings.Default.Save() MessageBox.Show($"设置项「{settingName}」创建成功!") Else MessageBox.Show($"设置项「{settingName}」已经存在啦!") End If End Sub
小提示:
- 这里用的是用户范围的设置(UserScoped),每个用户的设置会单独存储在各自的配置文件中,不会互相影响;如果是应用程序范围的设置(ApplicationScoped),属于全局只读设置,无法动态修改,所以动态创建时优先选用户范围。
- 后续读取这个动态设置的话,直接用
Properties.Settings.Default(settingName)即可获取值。
二、程序关闭时自动保存数据
要实现程序关闭时保存数据,最可靠的方式是利用窗体的FormClosing事件——不管用户是点击关闭按钮、用快捷键关闭还是通过任务管理器结束进程(正常关闭场景),都会触发这个事件。
方法1:绑定FormClosing事件处理
在窗体的事件面板中找到FormClosing,或者手动添加如下代码:
Private Sub MainForm_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing ' 保存所有设置(包括你动态创建的那些) Properties.Settings.Default.Save() ' 如果还有其他临时数据需要保存(比如TextBox里的实时内容),可以在这里补充 ' 示例:Properties.Settings.Default.LastUserInput = TextBox1.Text ' Properties.Settings.Default.Save() MessageBox.Show("数据已自动保存,程序即将关闭!") End Sub
方法2:重写OnFormClosing方法(自定义窗体推荐)
如果你是自定义窗体类,重写基类的OnFormClosing方法会更符合面向对象的设计逻辑:
Protected Overrides Sub OnFormClosing(e As FormClosingEventArgs) MyBase.OnFormClosing(e) ' 必须调用基类的方法,保证窗体正常关闭流程 ' 执行保存操作 Properties.Settings.Default.Save() End Sub
补充说明:
Properties.Settings.Default.Save()会把所有设置(包括动态添加的项)写入到用户本地配置文件,路径一般是C:\Users\[你的用户名]\AppData\Local\[程序名称]\[版本号]\user.config,下次启动程序时可以直接读取这些保存的值。
内容的提问来源于stack exchange,提问作者محمود تامر




