如何在Winforms应用程序的配置中保存对象?
问题描述:
我试图实现功能,以允许用户选择他最喜欢的形式。最喜欢的表格是他/她需要快速访问的表单。通过ToolStripMenu来避免浏览太久。如何在Winforms应用程序的配置中保存对象?
我尝试在应用程序配置中保存对表单的引用。但我得到的错误
值类型“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
答
只能存储在应用程序配置文件string
值,没有对象。
但只是在配置文件中存储表单的名称。 开始创建应用程序时,请通过反射来创建表单,如this Object Factory示例中所示。
Public Class ObjectFactory
Public Shared Function CreateAnObject(ByVal ObjectName As String) As Object
Dim Assem = [Assembly].GetExecutingAssembly()
Dim myType As Type = Assem.GetType(ObjectName.Trim)
Dim o As Object = Nothing
Try
o = Activator.CreateInstance(myType)
Catch oEx As TargetInvocationException
MessageBox.Show(oEx.ToString)
End Try
Return o
End Function
End Class
...
Dim formName as String = configuration.AppSettings.Settings.Item(<YourSettingKey>)
Dim oForm As Form = _
ObjectFactory.CreateAnObject(formName)
您应该保存表单的名称来代替。保存整个表格并不好,尤其是如果您将来改变它的话。查看[这个问题](http://stackoverflow.com/questions/26478165/calling-a-separate-windows-form-using-its-name-as-a-string)了解如何通过名称打开表单。 **注意:**它会创建一个新的窗体实例,这意味着它不能通过使用其默认实例进行修改。 –
保存其名称的问题是我必须保存它的参数,这些参数又是对象。如果它创建一个新的实例,这不是一个问题。 – SamekaTV
嗯...那么保存整个表单似乎更好。你可以将它序列化为一个base64字符串。 [看到这个答案](http://stackoverflow.com/a/2861749/3740093)。 –