将String转换回Tab Control Property

时间:2015-08-27 19:25:32

标签: vb.net serialization tabcontrol

背景

我已经序列化了一个选项卡控件的属性,选中了选项卡。我正在使用两个对象列表来存储正在序列化的对象预设对象。

 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'。

问题

如何从字符串后面转换标签控件字符串属性?

1 个答案:

答案 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将警告您。