基本上我正在创建一个包含9种形式的D& D角色表,其中6种将被保存。我需要在这6个表单中的每一个中保存每个TextBox。我还没有尝试过序列化,因为我还没有找到一个特别好的指南来澄清我到底需要做什么,而且在这一点上它对我来说相当混乱。但是,我尝试保存到文件并在文件打开时写回。这适用于一种形式,但我几乎可以肯定,鉴于编写代码的方式,它不适用于多种形式。
Dim SaveCharacter As StreamWriter
If txtName.Text = "" Then
MessageBox.Show("In order to save, you must at least enter a name for your character.", "Error: No Name Entered")
Else
SaveCharacterAs.ShowDialog()
System.IO.File.WriteAllText(SaveCharacterAs.FileName, "")
Try
For Each cnt In Me.Controls.OfType(Of TextBox)
SaveCharacter = File.AppendText(SaveCharacterAs.FileName)
SaveCharacter.WriteLine(cnt.Text)
SaveCharacter.Close()
Next
For Each cnt In frmAttributeRoller.Controls.OfType(Of TextBox)
SaveCharacter = File.AppendText(SaveCharacterAs.FileName)
SaveCharacter.WriteLine(cnt.Text)
SaveCharacter.Close()
Next
以上代码是我写入文件的代码。我正在考虑尝试将文件保存为.txt文件,其中包含在表单中输入的字符的名称,对于我正在保存的每个子表单,创建一个单独的.txt文件,其字符名称与表单连接name,然后编写代码以正确的形式打开所有这些文件,但如果用户选择了错误的文件,那么这可能会变得混乱。有没有更好的方法将多个表单保存到一个文件而不进行序列化?序列化我最好的赌注? 谢谢你的帮助!
答案 0 :(得分:0)
这是一个建议。使用描述字符表字段的表创建DataSet。然后创建该DataSet的一个实例,并将默认(通常为空白)值的记录添加到表中。
现在您可以将列绑定到这样的文本框。 (我是从记忆中做到这一点,所以请原谅我,如果它不能编译 - 它至少应该指向正确的方向
Dim ds As New CharacterDataSet ' Whatever you call your dataset
Dim bs As New BindingSource(ds, ds.CharacterTable.TableName)
bs.MoveFirst()
' Note, if you end up having more than one record, you can use bs.Filter
' to select which record the BindingSource points to.
txtCharacterName.DataBindings.Add("Text", bs, "CharacterName") ' Where CharacterName is the name of the column in the table
cboCharacterRace.DataBindings.Add("SelectedValue", bs, "Race") ' For a ComboBox
此外,如果您希望DataBindings.Add中的列名更加健壮,您可以执行ds.CharacterTable.CharacterNameColumn.ColumnName
之类的操作。这样,您就不会在绑定中意外拼错列名。
现在您可以使用DataSet.WriteXML一次性写出整个数据集。