2

私にはフォームがあり、いくつかのボタンが何かをしています。

ボタンを押すと、テキストボックスやグループボックスなどのウィンドウフォームコントロールが表示されたり消えたりして、フォーム上の場所が変わります。これは動的なフォームだからです:)

ただし、私がやりたいのは、ボタン(BACK)を使用して、フォームをボタンのアクション前の状態に戻し、コントロールを元の場所に戻し、アクション前の状態にすることです。

CForm1の配列のようなものを持つクラスMyState()を考えました。フォームの状態をその配列に保存し、backボタンを押して配列からフォームの状態の「コピー」と、インデックスの状態のインデックスを取得します。

残念ながら、これを実装する方法がわかりません。:|

誰かが私にこれを行う正しい方法を教えてもらえますか?

class Mystate
{
    private Form1 [] state;

    public Mystate(int n)
    {
        this.state = new Form1[n];
    }

    public Form1 this[int index]
    {
        get
        {
            return state[index];
        }
        set
        {
            this.state[index] = value;
        }
    }
}
4

2 に答える 2

0

このようなものは組み込まれていません。これは自分で行う必要があります。

私は次のようにします: まず、保存したい状態を正確に定義します。例:

Control.Bounds
Control.Text
Checkbox.IsChecked
NumericUpDown.Value
...

これで、何を保存する必要があるかが正確にわかりました。

すぐに、フォームの現在の状態のスナップショットを作成し、すべてのコントロールに対して再帰的に作成する方法が必要です。リフレクションを使用してこれを実装すると、コントロールの数に関係なくすべてが自動化されます。

第 3 に、フォームのインスタンスにスナップショットを適用できる必要があります。これは(2)の逆のプロセスです。これは、リフレクションを使用して行うこともできます。

于 2012-04-05T17:55:01.613 に答える
0

フォームに高レベルの元に戻す/やり直し機能が必要なようです。

これはそのようなもののためのフレームワークです: http://www.codeproject.com/Articles/10576/An-Undo-Redo-Buffer-Framework

これは近いですが、あなたの質問とまったく同じではない答えです(ただし、パターンは同じです):TextBoxの優れた効率的な元に戻す/やり直し機能を実装する方法

MementoPattern: http://www.codeproject.com/Articles/18025/Generic-Memento-Pattern-for-Undo-Redo-in-C

于 2012-04-05T17:54:15.450 に答える