我已经序列化了一个选项卡控件的属性,选中了选项卡。我正在使用两个对象列表来存储正在序列化的对象预设对象。
Dim _allPresetsList As New List(Of PresetObject)
Dim _XmlPresetsList As New List(Of PresetObject)
preset.TabPageProperty = TabControl1.SelectedTab.ToString()
Dim objStreamWriter As New StreamWriter(_XmlLocation)
Dim xml As New XmlSerializer(_allPresetsList.GetType)
xml.Serialize(objStreamWriter, _allPresetsList)
objStreamWriter.Close()
用于反序列化的代码
Dim objStreamReader As New StreamReader(_XmlLocation)
_XmlPresetsList = xml.Deserialize(objStreamReader)
objStreamReader.Close()
但是我无法将其转换回来,这就是我用其他控件成功完成它的方法。
CheckBox1.Checked = _XmlPresetsList(0).CheckBox1Property.ToString()
这不起作用
TabControl1.SelectedTab = _XmlPresetsList(0).TabPageProperty.ToString()
我收到此错误
“String”类型的值无法转换为 'System.Windows.Forms.TabPage'。
问题
如何从字符串后面转换标签控件字符串属性?
答案 0 :(得分:2)
这可能导致您的错误:
preset.TabPageProperty = TabControl1.SelectedTab.ToString()
这只是保存类似" TabPage:{TabPage1}"。由于SelectedTab
是一个对象属性,它不能被序列化并保存它的类型名称对确定选择哪个没有多大帮助。由于错误声明您无法从字符串中创建TabPage
对象。而是保存和恢复比所选索引更简单的东西:
preset.TabPageIndex = TabControl1.SelectedIndex
我不确定PresetObject
的内部,但我会使用类型属性 - 在这种情况下Int32
而不是字符串。序列化器将为您来回转换。
您还应该启用Option Strict
。
CheckBox1.Checked = _XmlPresetsList(0).CheckBox1Property.ToString()
Checked
是一个布尔值,但您要为其指定一个字符串值。当您离开VB进行此类转换时,Option Strict
将警告您。