2016-07-28 2 views
1

Я пытаюсь реализовать функциональность, позволяющую пользователю выбирать его любимые формы. Любимые формы - это формы, к которым ему нужен быстрый доступ. Чтобы избежать слишком долгого просмотра через ToolStripMenu.Как сохранить объекты в приложении «Конфигурация Winforms»?

Я пытаюсь сохранить ссылку на форму в конфигурации приложения. Но я получаю ошибку

Значение «System.Windows.Forms.Form» типа не могут быть преобразованы в «String».

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 
+0

Вы должны сохранить имя формы вместо этого. Сохранение всей формы не очень хорошо, особенно если вы измените ее в будущем. См. [Этот вопрос] (http://stackoverflow.com/questions/26478165/calling-a-separate-windows-form-using-its-name-as-a-string) для того, как вы можете открыть форму по ее названию , ** ПРИМЕЧАНИЕ. ** Он создает новый экземпляр формы, то есть его нельзя изменить, используя свой экземпляр по умолчанию. –

+0

Проблема с сохранением его имени заключается в том, что я должен сохранить его параметры, которые снова являются объектами. И это не проблема, если он создает новый экземпляр. – SamekaTV

+0

Хм ... Тогда лучше сохранить всю форму. Вы можете сериализовать его на base64-строку. [См. Этот ответ] (http://stackoverflow.com/a/2861749/3740093). –

ответ

1

Вы можете хранить только string значения в файле приложения конфигурации, никаких объектов.
Но просто сохраните имя формы в файле конфигурации. При запуске приложения создайте форму с помощью отражения, как показано на рисунке this Пример объекта.

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) 
+0

Как насчет формы с параметрами, являющимися объектами? – SamekaTV

+0

Вы говорите о параметрах конструктора формы типа 'new Form (o1, o2, ...)'? –

+0

Да, это именно то, что я имею в виду – SamekaTV

Смежные вопросы