2012-04-05 2 views
2

У меня есть форма, и у меня есть кнопки, которые делают вещи.C# сохранение состояния формы со всеми элементами управления

При нажатии кнопки окна образуют элементы управления, такие как текстовые поля или групповые ящики, кнопки появляются и исчезают, и изменить место на моей форме, ибо это динамическая форма :)

Однако то, что я хотел бы чтобы сделать это, нажмите кнопку (BACK), которая получит мою форму до состояния, которое было до действия кнопки, вернув элементы управления в место и сообщив, что они были перед действием.

Я думал о классе C MyState(), который будет иметь что-то вроде массива Form1. Я буду сохранять состояние формы в этом массиве и когда я нажму кнопку 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; 
     } 
    } 
} 
+1

Вы пробовали просто сериализовать форму с помощью BinarySerializer перед каждым действием и поместить сериализованные данные в стек? Не уверен, что форма и ее дети являются сериализуемыми или нет, но это, безусловно, было бы легким подходом, если они есть. –

+0

Я действительно не знаю, что именно вы пытаетесь сделать, но похоже, что вы можете просто использовать TabControl или что-то подобное. – marinus

+1

Возможный дубликат [Создание Wizards для Windows Forms в C#] (http://stackoverflow.com/questions/2340566/creating-wizards-for-windows-forms-in-c-sharp) –

ответ

0

Похоже, что вы хотите функцию отмены/повторения на высоком уровне для ваших форм.

Вот основа для таких вещей: http://www.codeproject.com/Articles/10576/An-Undo-Redo-Buffer-Framework

Вот ответ, который близок, но не совсем такой же, как ваш вопрос (картина implimented такая же, хотя): 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

Ничего подобного не встроено. Вы должны сделать это самостоятельно.

Я бы сделал это так: сначала определите, какое состояние вы хотите сохранить. Пример:

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

Теперь мы точно знаем, что необходимо сохранить.

Секунды, нам нужен способ создания моментального снимка текущего состояния формы и рекурсивно для всех элементов управления. Вы можете реализовать это с помощью отражения, чтобы все было автоматически независимо от того, сколько у вас элементов управления.

В-третьих, вы должны иметь возможность применить моментальный снимок к экземпляру формы. Это противоположный процесс (2). Это также можно сделать, используя отражение.

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