You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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,提问作者محمود تامر

火山引擎 最新活动