保存和加载带有标题的多个值 [英] Save and load multiple values with title
问题描述
我正在使用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
程序是这样构建的: 加载表单后,将在组合框1中使用方括号"[]"(标题1,标题2等)填充所有标题
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屋!