2016-07-28 14 views
1

私は彼が好きなフォームを選択できるように機能を実装しようとしています。お気に入りのフォームは、すぐにアクセスする必要のあるフォームです。 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 
+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

関連する問題