使用标题保存和加载多个值 [英] Save and load multiple values with title

查看:31
本文介绍了使用标题保存和加载多个值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用 Visual Studio Express 2012.

I am using Visual Studio Express 2012.

我想让我的程序以以下格式仅将数据保存并加载到一个附加数据文件(txt、csv、dll 或其他文件)中(只是一个示例,不必完全是这个,它的只是为了给你看).

I would like to let my program save and load data into only ONE additional data file (txt, csv, dll or something else) in the following format (just an example, doesn't have to be exact this one, its just to show you).

[Title1]
Value1
Value2
Value3
Value4

[Title2]
Value1
Value2
Value3
Value4

程序是这样构建的:加载表单后,Combobox1 将填充括号[]"中的所有标题(Title1、Title2 等)

The programm is built up like this: As soon as the Form is loaded, Combobox1 will be filled with all the titles in the brackets "[]" (Title1, Title2 etc)

如果您选择一个,则 4 个标签将被值填充.

If you select one then the 4 Labels will be filled with the values.

Label1 = Value1 | Label2 = Value2 | Label3 = Value3 | Label4 = Value4

推荐答案

这是一个使用 Class 来保存 Title/Values 和 XmlSerializer 来读取/写入 XML 文件的示例.类的实例保存在一个列表中.

Here's an example using a Class to hold the Title/Values and an XmlSerializer to read/write an XML file. Instances of the Class are held in a List.

代码如下:

Public Class Form1

    <Serializable> _
    Public Class TitleGroup

        Public Title As String
        Public Value1 As String
        Public Value2 As String
        Public Value3 As String
        Public Value4 As String

        Public Overrides Function ToString() As String
            Return Title
        End Function

    End Class

    Private TitleGroups As New List(Of TitleGroup)
    Private DataFile As String = System.IO.Path.Combine(Application.StartupPath, "Data.xml")

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        LoadXmlData()
    End Sub

    Private Sub LoadXmlData()
        If System.IO.File.Exists(DataFile) Then
            Try
                Dim xml As New System.Xml.Serialization.XmlSerializer(TitleGroups.GetType)
                Using fs As New System.IO.FileStream(DataFile, IO.FileMode.Open, IO.FileAccess.Read)
                    TitleGroups = DirectCast(xml.Deserialize(fs), List(Of TitleGroup))
                End Using
                ComboBox1.DataSource = Nothing
                ComboBox1.DataSource = TitleGroups
            Catch ex As Exception
                MessageBox.Show(ex.ToString, "Error Loading XML Data")
            End Try
        End If
    End Sub

    Private Sub ComboBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox1.SelectedIndexChanged
        If ComboBox1.SelectedIndex <> -1 Then
            Dim TG As TitleGroup = ComboBox1.SelectedItem
            Label1.Text = TG.Value1
            Label2.Text = TG.Value2
            Label3.Text = TG.Value3
            Label4.Text = TG.Value4
        End If
    End Sub

    Private Sub Form1_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing
        SaveXmlData()
    End Sub

    Private Sub SaveXmlData()
        Try
            Dim xml As New System.Xml.Serialization.XmlSerializer(TitleGroups.GetType)
            Using fs As New System.IO.FileStream(DataFile, IO.FileMode.OpenOrCreate, IO.FileAccess.Write)
                xml.Serialize(fs, TitleGroups)
            End Using
        Catch ex As Exception
            MessageBox.Show(ex.ToString, "Error Saving XML Data")
        End Try
    End Sub

End Class

这是一个示例 XML 文件:

and here's an example XML File:

<?xml version="1.0"?>
<ArrayOfTitleGroup xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <TitleGroup>
    <Title>Pets</Title>
    <Value1>Dog</Value1>
    <Value2>Cat</Value2>
    <Value3>Fish</Value3>
    <Value4>Hamster</Value4>
  </TitleGroup>
  <TitleGroup>
    <Title>Languages</Title>
    <Value1>C#</Value1>
    <Value2>VB.Net</Value2>
    <Value3>Java</Value3>
    <Value4>Objective-C</Value4>
  </TitleGroup>
</ArrayOfTitleGroup>

这篇关于使用标题保存和加载多个值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆