65.9K
CodeProject 正在变化。 阅读更多。
Home

使用 PropertyGrid 加载和保存数据

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.69/5 (8投票s)

2008年6月28日

CPOL

2分钟阅读

viewsIcon

53559

downloadIcon

1

一个简单的例子,演示如何使用序列化技术在 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 中的值将被重新加载并显示。

按照以下步骤创建示例

  1. 在 VB.NET 2008 中创建一个新项目
  2. 以设计模式显示您的窗体(名为 Form1
  3. 添加一个 PropertyGrid 控件
  4. 添加一个 Button 控件并将 Text 属性更改为 LOAD
  5. 添加第二个 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 软件开发网络

© . All rights reserved.