database - 比 VB.Net 的 my.settings 保存数据的替代方法

标签 database vb.net

我需要为 Windows 窗体应用程序保存大约 1600 条不同的信息

解决此问题的最佳方法是什么?例如,一些用户设置看起来像这样 measuringItem1Name , measuringItem1Equation , measuringItem1Enabled , measuringItem1Offset , measuringItem2Name ...

我查看了 my.settings,但是,我发现输入每个用户设置会非常乏味且容易出错。

似乎最好的解决方案是拥有一种可以访问每个单独的单元格并编辑该信息的表格。

这样的东西存在吗?如果是这样,将如何使用 VB.Net 实现?

最佳答案

我建议创建一个具有属性的类来保存您的设置。将类标记为可序列化。然后将这个类的一个实例作为应用程序启动/关闭序列化和反序列化到用户的配置文件目录。如果您需要该选项,这将允许您拥有针对每个用户单独保存的强类型设置。它还将允许您轻松地为设置设置默认值。

您可以根据需要使“设置”类的深度尽可能深,属性由其他子设置类或按索引设置的列表组成。这是一个非常强大的模式。

例如:

settings.MeasuringItem(1).Enabled = True
settings.MeasuringItem(1).Equation = "1+1"
settings.MeasuringItem(1).Offset = 15

settings.MeasuringItem(2).Enabled = True
settings.MeasuringItem(2).Equation = "1+1"
settings.MeasuringItem(2).Offset = 15

Settings 是主要的设置类,上面有一个 Generic.List(of MeasuringItem) 属性。 MeasuingItem 是另一个具有 .Enabled As Boolean.Equation as string 等属性的类。

我还没有真正检查过这个错误。您会想要进行更多的安全检查,但这应该让您入门。

<Serializable>
Public Class Settings

    Public Sub New()
        _measuringItems = New List(Of MeasuringItem)
    End Sub

    Private _measuringItems As List(Of MeasuringItem)
    Public ReadOnly Property MeasuringItems As List(Of MeasuringItem)
        Get
            Return _measuringItems
        End Get
    End Property

    Public Sub Save()
        Using s As New IO.FileStream("Path to save", IO.FileMode.Create)

            Dim formatter As New System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
            formatter.Serialize(s, Me)
        End Using
    End Sub

    Public Shared Function Load() As Settings
        Dim settings As Settings = Nothing

        Using s As New IO.FileStream("Path to load", IO.FileMode.Open)

            Dim formatter As New System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
            settings = CType(formatter.Deserialize(s), ServerHost.Settings)
        End Using
        Return settings
    End Function


End Class

<Serializable>
Public Class MeasuringItem
    Public Property Enabled As Boolean = True 'These are the default values
    Public Property Equation As String = "1+1"
    Public Property Offset As Integer = 15
End Class

一个简单的用法示例:

    'Create a completely new settings instance with 100 measuring items
    Dim settings1 As Settings = New Settings
    For i As Integer = 1 To 100
        settings1.MeasuringItems.Add(New MeasuringItem)
    Next
    settings1.MeasuringItems(0).Enabled = False
    settings1.MeasuringItems(5).Equation = "testing"

    'Save it
    settings1.Save()

    'load the saved settings
    Dim settings2 As Settings = Settings.Load

关于database - 比 VB.Net 的 my.settings 保存数据的替代方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29634895/

相关文章:

c# - 如何获取cassandra中键空间的所有表的列表

vb.net - 在 datagridview 中禁用 "first column header selected"

asp.net-mvc - 为什么当我使用 aspnet_compiler.exe 编译站点时会出现构建错误,而当我使用 VS 的构建工具时却不会出现构建错误?

javascript - 将代码隐藏中的字符串输出到新页面或窗口

sql-server - 在 SQL Server 表中匹配具有可变数量的前导零的字段

java - 网络 javaSE 应用程序

vb.net - 将数据导出到多个 Excel 工作表

vb.net - Prolog 连接到 vb.net

java - 有没有办法检查一个列在java中是否是虚拟的?

mysql - 关于 MyISAM 表上的锁定和事务的问题