使用 PropertyGrid 加载和保存数据






3.69/5 (8投票s)
一个简单的例子,演示如何使用序列化技术在 PropertyGrid 中加载、保存和显示对象。
引言
我最近一直在研究 Visual Basic 2008 中的 PropertyGrid
控件。网上有很多信息,主要针对 C# 程序员。经过一番研究和不可避免的尝试错误,我发现了一个网站上问题的回复,看起来像是对一个常见问题的答案:如何使用 VB.NET 将信息加载和保存到 PropertyGrid
中?不幸的是,该帖子有点晦涩。经过一番调整,我得到了以下一个完全可用的示例,并想与大家分享。
背景
以下示例是在 Windows Vista 和 Visual Basic Express Edition 2008 上开发的并经过测试,运行在 .NET 3.5 Framework 上,Internet Explorer 版本为 7。它应该适用于这些系统的早期版本。
Using the Code
该示例使用序列化将类对象加载和保存到 XML 文件中。为了实现这一点,只需将属性 <Serialize()>
添加到类标识符,如下所示
<Serializable()> _
Public Class AppSettings
您需要在您定义的类对象中添加两个函数/方法,以提供加载和保存功能。在下面的完整示例中,这些方法分别称为
Public Shared Function Load() As AppSettings
和
Public Sub Save()
然后,您只需在主类中包含以下代码,以交替加载或保存类对象到您的 PropertyGrid
中
Public Class Form1
'Load AppSettings
Dim _appSettings As New AppSettings()
Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click
_appSettings = AppSettings.Load()
' Actually change the form size
Me.Size = _appSettings.WindowSize
PropertyGrid1.SelectedObject = _appSettings
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button2.Click
_appSettings.Save()
End Sub
End Class
要运行以下完整的示例,请创建一个包含 PropertyGrid
和两个 Button
的窗体。单击 LOAD 按钮时,我们加载一个包含已保存窗口大小的 XML 文件(如果该文件已存在)。如果该文件不存在,程序会将窗口宽度和高度设置为 600x600。然后将此信息加载到 PropertyGrid
中。现在,我们可以修改 PropertyGrid
中的窗口大小值。单击 SAVE 按钮会将 PropertyGrid
中的信息序列化并将其值保存到磁盘上的 XML 文件中。如果您现在关闭程序然后重新运行它,单击 LOAD 按钮时,您先前输入到 PropertyGrid
中的值将被重新加载并显示。
按照以下步骤创建示例
- 在 VB.NET 2008 中创建一个新项目
- 以设计模式显示您的窗体(名为
Form1
) - 添加一个
PropertyGrid
控件 - 添加一个
Button
控件并将Text
属性更改为 LOAD - 添加第二个
Button
控件并将Text
属性更改为 SAVE
现在,切换到代码编辑器并将 Form1
代码从
Class Form
End Class
更改为以下内容
'==============================================
'How to serialize, load and save a class object
'==============================================
Imports System.Xml.Serialization
Imports System.IO
Public Class Form1
'Load AppSettings
Dim _appSettings As New AppSettings()
Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click
_appSettings = AppSettings.Load()
' Actually change the form size
Me.Size = _appSettings.WindowSize
PropertyGrid1.SelectedObject = _appSettings
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button2.Click
_appSettings.Save()
End Sub
End Class
<Serializable()> _
Public Class AppSettings
Protected _size As System.Drawing.Size
Public Property WindowSize() As System.Drawing.Size
Get
Return _size
End Get
Set(ByVal value As System.Drawing.Size)
_size = value
End Set
End Property
Public Shared Function Load() As AppSettings
Dim serializer As XmlSerializer = New XmlSerializer(GetType(AppSettings))
Dim retVal As AppSettings
Dim reader As TextReader
Dim fileNotFound As Boolean
Try
reader = New StreamReader("MyAppSettings.xml")
Catch ex As FileNotFoundException
' Take the defaults
fileNotFound = True
End Try
If fileNotFound Then
retVal = New AppSettings
retVal.WindowSize = New System.Drawing.Size(600, 600)
Else
'Read it from the file
retVal = serializer.Deserialize(reader)
reader.Close()
End If
Return retVal
End Function
Public Sub Save()
Dim serializer As New XmlSerializer(GetType(AppSettings))
Dim writer As TextWriter = New StreamWriter("MyAppSettings.xml")
serializer.Serialize(writer, Me)
writer.Close()
End Sub
End Class
关注点
上述代码示例主要基于 Christian Lucht 对以下帖子的回复:SDN 软件开发网络。