2012-02-10 9 views
0

私はMDIレイアウトWinFormsアプリケーションを持っています。私は開いたフォームの状態(サイズ、テキストボックスの値、選択されたリストのインデックス...)を保存して、新しい起動時にそれらを取得するアプリケーションを終了したいと思います。WinFormsのMDIフォームの保存状態をnet。

MDIアプリケーションに特定のフォームのインスタンスがさらに存在する場合、このデータを保存する方法はありませんでした。例えば。テキストボックスを持つForm1のインスタンスを2つ開いた場合。インスタンス1のテキストボックスのテキストは 'a'で、インスタンス2のテキストは 'b'です。もし私がそれを保存すれば。 .netの機能を使用してapp.configに接続すると、instance1の保存されたデータは同じタイプなので、instance2の設定は上書きされます。開始時にロードすると、両方のインスタンスで 'b'になります。

状態を別々に保存するにはどうすればよいですか?それらを保存するときにそれらを識別する方法?

+0

明らかに、フォームリストは1つではなく、永続化する必要があります。組み込み関数はありませんが、xmlシリアル化を使用するには簡単です。 –

+0

私はUIレイアウトを維持することができるドッキング可能なウィンドウコンポーネントを使用しているので、その必要はありません。それはレイアウトを維持する、私はUI上のデータを 'のみ'保持する必要があります。 – Tom

答えて

0

説明したように実装する方法はありません。復元するバージョンを決定する方法がないため、1つまたは最後の状態だけを保存できます。

しかし、名前付き状態ストレージを使用して目標を達成できます。

あなたは、あなたが他の名前と状態をロードすることにより、それを必要とするときは、いつでも中にUI状態を保存または復元することができる2つの方法

interface IStateStorage 
{ 
    UIState LoadState(string name); 
    void SaveState(string name, State state); 
} 

を提供しなければならない独自のストレージを作成する必要があります。

あなたの質問の場合は、UIの状態を2回保存することができます 初めてデフォルトの状態を上書きするデフォルト状態のss.SaveState( "default"、state)を保存します。 2回目に、名前付き状態を上書きする名前付き状態ss.SaveState( "a"、state)を保存します。

フォームを開いたときに、どの状態をデフォルトのものか別の名前付きのものに復元するかを選択できます。

関連する問題