2012-04-05 11 views
2

Ich habe ein Formular und ich habe einige Tasten, die Sachen machen.C# speichern Zustand des Formulars mit allen Steuerelementen

Wenn ich Tasten drücken die Fenster Kontrollen bilden, wie Textfelder oder Gruppenfelder, Schaltflächen erscheinen und verschwinden und auf meine Form ändern, denn es ist eine dynamische Form ist :)

Doch was würde Ich mag zu tun ist, eine Schaltfläche (BACK) zu haben, die mein Formular in den Zustand bringt, der es vor einer Handlung eines Knopfes war, die Kontrollen an dem Platz zurückbringend und feststellend, dass sie vor Handlung waren.

Ich dachte an eine C Klasse MyState(), die etwas wie ein Array von Form1 haben wird. Ich werde den Formularstatus in diesem Array speichern und wenn ich die back Schaltfläche drücken, um aus Array, das den Status "Form" und möglicherweise einen Index für Indexierungsstatus "kopieren" abrufen.

Ich habe leider keine Ahnung, wie dies zu implementieren ist. : |

Kann mir jemand den richtigen Weg zeigen, dies zu tun?

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; 
     } 
    } 
} 
+1

Haben Sie versucht, das Formular vor jeder Aktion mit BinarySerializer zu serialisieren und die serialisierten Daten in einem Stapel zu platzieren? Nicht sicher, ob Form und seine Kinder alle serialisierbar sind oder nicht, aber das wäre sicherlich ein einfacher Ansatz, wenn sie es sind. –

+0

Ich weiß nicht genau, was genau Sie versuchen, aber es klingt, als könnten Sie einfach ein TabControl oder etwas Ähnliches verwenden. – marinus

+1

mögliches Duplikat von [Erstellen von Assistenten für Windows Forms in C#] (http://stackoverflow.com/questions/2340566/creating-wizards-for-windows-forms-in-c-sharp) –

Antwort

0

Klingt so, als ob Sie eine Funktion zum Rückgängigmachen/Wiederherstellen auf hohem Niveau für Ihre Formulare wünschen.

Hier ist ein Rahmen für eine solche Dinge: http://www.codeproject.com/Articles/10576/An-Undo-Redo-Buffer-Framework

Hier ist eine Antwort, die nahe ist, aber nicht genau das gleiche wie Ihre Frage (Die implimented Muster, obwohl das gleiche ist): How to implement good and efficient undo/redo functionality for a TextBox

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

0

Nichts ist so eingebaut. Sie müssen das alleine machen.

Ich würde es so machen: Definieren Sie zuerst genau, welchen Zustand Sie speichern möchten. Beispiel:

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

Jetzt wissen wir genau, was gespeichert werden muss.

Sekunden, wir brauchen eine Möglichkeit, eine Momentaufnahme des aktuellen Status des Formulars und rekursiv für alle Steuerelemente zu erstellen. Sie können dies mithilfe von Reflektion implementieren, so dass alles automatisch ausgeführt wird, egal wie viele Steuerelemente Sie haben.

Drittens müssen Sie einen Snapshot auf eine Instanz von Form anwenden können. Dies ist der umgekehrte Prozess von (2). Dies kann auch durch Reflexion erfolgen.

Verwandte Themen