我需要为 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/