我需要为Windows窗体应用程序保存大约 1600条不同的信息。
最好的方法是什么?例如,某些用户设置看起来像measuringItem1Name
,measuringItem1Equation
,measuringItem1Enabled
,measuringItem1Offset
,measuringItem2Name
......
我已经查看了my.settings,但是,我发现输入每个用户设置会非常繁琐且容易出错。
似乎最好的解决方案是拥有一种可以访问每个单独的单元格并编辑该信息的表格。
这样的事情存在吗?如果是这样,如何用 VB.Net 实现它?
答案 0 :(得分:2)
我建议创建一个包含属性的类来保存您的设置。将该类标记为可序列化。然后将此类的实例序列化和反序列化为应用程序启动/关闭到用户的配置文件目录。这将允许您具有强类型设置,如果您需要该选项,则按用户单独保存。它还允许您轻松设置设置的默认值。
您可以进行"设置"类所需的深度,属性由其他子设置类或索引设置列表组成。这是一个非常强大的模式。
例如:
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
答案 1 :(得分:0)
我建议使用数据库来存储值。我不知道你的操作环境(例如,我有几个企业SQL服务器供我使用。)你可以使用SQL Express Edition,免费。 SQL Lite也是一种选择。您甚至可以使用Access,但这需要安装MS Office。
如果您不想使用数据库路由,可以创建一个设置类,并使该类可序列化。这会将对象序列化为二进制文件或XML文件(取决于你如何设置它。)如果你想采用这种方法,我会为你发布代码。