2015-04-25 43 views
2

我在運行時動態創建按鈕。 但當我關閉並重新打開這些按鈕將消失。 它如何永久存儲動態創建的按鈕和其他控件。在運行時動態創建按鈕並存儲,在C中進行檢索#

動態創建控制按鈕的代碼是:

int loc=150; 
    private void Button1_Click(object sender, EventArgs e){ 
    CreateDynamicButton(); 
    } 

     private void CreateDynamicButton() 
     { 
      // Create a Button object 
      Button dynamicButton = new Button(); 

      // Set Button properties 
      dynamicButton.Height = 40; 
      dynamicButton.Width = 300; 
      dynamicButton.BackColor = Color.Red; 
      dynamicButton.ForeColor = Color.Blue; 
      dynamicButton.Location = new Point(20, loc); 
    loc=loc+50; 
      dynamicButton.Text = "I am Dynamic Button"; 
      dynamicButton.Name = "DynamicButton"; 
      dynamicButton.Font = new Font("Georgia", 16); 

      // Add a Button Click Event handler 
      dynamicButton.Click += new EventHandler(DynamicButton_Click); 

      // Add Button to the Form. Placement of the Button 
      // will be based on the Location and Size of button 
      Controls.Add(dynamicButton);    
     } 

     /// <summary> 
     /// Button click event handler 
     /// </summary> 
     /// <param name="sender"></param> 
     /// <param name="e"></param> 
     private void DynamicButton_Click(object sender, EventArgs e) 
     { 
      MessageBox.Show("Dynamic button is clicked"); 
propertyGrid1.SelectedObject=sender; 
*****and i change it some color fontsize in propertyGrid1 it will be changed 
*****how do i save permanently 
     } 

請幫助我如何存儲所有永久控制(控制顏色,位置,名稱...)

在此先感謝。

回答

1

你不能,或者它不會動態。每次需要按鈕時都需要調用代碼。你可以將它存儲在一個文件或表中,如果這是你想要的。

在你的例子中,就我所能判斷的來說,按鈕是動態的並不需要太多。但也許它只是作爲一個例子

+0

這只是一個樣本,但我存儲佈局和所有控件的屬性。請任何可能的方式編輯使用獲取當前屬性使用propertygrid保存並加載permenantlly。 –

0

我認爲你應該使用BinaryFormatter類和序列化整個Controls對象。

FileStream fs = new FileStream("DataFile.dat", FileMode.Create); 

    BinaryFormatter formatter = new BinaryFormatter(); 
    try 
    { 
     formatter.Serialize(fs, Controls); 
    } 
    finally 
    { 
     fs.Close(); 
    } 

和反序列化

FileStream fs = new FileStream("DataFile.dat", FileMode.Open); 
    try 
    { 
     BinaryFormatter formatter = new BinaryFormatter(); 
     Controls = (Control.ControlCollection)formatter.Deserialize(fs); 
    } 
    finally 
    { 
     fs.Close(); 
    } 
相關問題