将字符串转换回选项卡控件 属性

Convert String back to Tab Control Property

背景

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

 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()

我遇到了这个错误

Value of type 'String' cannot be converted to 'System.Windows.Forms.TabPage'.

问题

如何将选项卡控件字符串 属性 从字符串转换回?

这可能是导致您的错误的原因:

preset.TabPageProperty = TabControl1.SelectedTab.ToString()

这只是为了保存 "TabPage: {TabPage1}" 之类的东西。由于 SelectedTab 是一个对象 属性,它不能被序列化并且保存它的类型名称对于确定选择了哪个没有太大帮助。正如错误所述,您不能从字符串中创建 TabPage 对象。而是保存和恢复更简单的东西,比如选定的索引:

preset.TabPageIndex = TabControl1.SelectedIndex

我不确定 PresetObject 的内部结构,但我会使用类型化属性 - 在本例中为 Int32 而不是字符串。序列化程序将为您来回转换。

您还应该开启 Option Strict

CheckBox1.Checked = _XmlPresetsList(0).CheckBox1Property.ToString()

Checked 是一个布尔值,但您要为其分配一个字符串值。 Option Strict on 将在您离开 VB 进行此类转换时发出警告。