【发布时间】:2016-07-28 07:25:22
【问题描述】:
我正在尝试实现允许用户选择他最喜欢的表单的功能。最喜欢的表格是他/她需要快速访问的表格。为了避免浏览 ToolStripMenu 的时间过长。
我尝试在应用程序配置中保存对表单的引用。但我得到了错误
“System.Windows.Forms.Form”类型的值无法转换为 '字符串'。
Public Sub SetSetting(ByVal pstrKey As String, ByVal frmFavorite As Form)
Dim keyExists As Boolean = False
For Each strKey As String In configuration.AppSettings.Settings.AllKeys
If strKey.Equals(pstrKey) Then
configuration.AppSettings.Settings.Item(pstrKey).Value = frmFavorite
keyExists = True
End If
Next
If Not keyExists Then
configuration.AppSettings.Settings.Add(pstrKey, frmFavorite)
End If
configuration.Save(ConfigurationSaveMode.Modified)
ConfigurationManager.RefreshSection("appSettings")
End Sub
【问题讨论】:
-
您应该保存表单的名称。保存整个表单并不好,特别是如果您将来更改它。请参阅this question,了解如何按名称打开表单。 注意: 它会创建一个新的表单实例,这意味着它不能通过使用它的默认实例来修改。
-
保存它的名字的问题是我必须保存它的参数,这些参数又是对象。如果它创建一个新实例,这不是问题。
-
嗯...那么保存整个表单似乎更好。您可以将其序列化为 base64 字符串。 See this answer.
-
是的(回答已删除的评论),使用二进制序列化您将能够序列化整个表单及其所有内容。通过将其序列化为内存流,您可以将其作为字节数组获取,该数组可以转换为 Base64 字符串。
-
@ISeeSharp 不要考虑序列化整个表单。这没有意义。将对您很重要的属性绑定到设置就足够了。这样,当您加载每个表单时,这些属性将从设置中加载。
标签: vb.net winforms configuration