2012-04-05 37 views
2

我有一個窗體,我有一些按鈕做東西。C#保存窗體的狀態與所有控件

當我按下按鈕,Windows窗體控件,比如文本框或組框,按鈕出現和消失,並換地方了我的形式,因爲它是一個動態的形式:)

不過,我想什麼要做的是有一個按鈕(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序列化表單並將序列化數據放入堆棧?不確定Form和它的孩子是否都是可序列化的,但如果他們是,那肯定是一個簡單的方法。 – 2012-04-05 17:10:39

+0

我真的不知道你到底想做什麼,但聽起來你可以使用TabControl或類似的東西。 – marinus 2012-04-05 17:13:47

+1

[在C#中爲Windows窗體創建嚮導]的可能重複(http://stackoverflow.com/questions/2340566/creating-wizards-for-windows-forms-in-c-sharp) – 2012-04-05 17:19:37

回答

0

沒有像這樣的內置。你必須自己做。

我會這樣做:首先,準確定義你想要保存的狀態。例如:

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

現在我們確切知道需要保存什麼。

秒,我們需要一種方法來創建表單的當前狀態的快照,並遞歸所有控件。您可以使用反射來實現這一點,以便無論您擁有多少控件,一切都會自動完成。

第三,您需要能夠將快照應用於Form的實例。這是(2)的相反過程。這也可以使用反射來完成。