2010-09-01 2 views
1

Можно ли сохранить пользовательский элемент управления WinForms (например: кнопка) в базе данных? Или единственное, что можно сохранить, это свойство настроек.Возможно ли сохранить пользовательский элемент управления в базе данных

EDIT: Как то, что сказал triggerX. Я протестировал сериализуемую идею.

btnAttrib.cs

[Serializable()] 
class btnAttrib 
{ 
    public Point LocationBTN { get; set; } 
    public Size SizeBTN { get; set; } 
    public string NameBTN { get; set; } 

    public btnAttrib(Point l, Size s, string n) 
    { 
     this.LocationBTN = l; 
     this.SizeBTN = s; 
     this.NameBTN = n; 
    } 
} 

MainForm.cs

private void button2_Click(object sender, EventArgs e) 
    { 
     var btnAttr = new List<btnAttrib>(); 

     btnAttr.Add(new btnAttrib(new Point(50, 100), new Size(50, 50), "Button 1")); 
     btnAttr.Add(new btnAttrib(new Point(100, 100), new Size(50, 50), "Button 2")); 
     btnAttr.Add(new btnAttrib(new Point(150, 100), new Size(50, 50), "Button 3")); 
     btnAttr.Add(new btnAttrib(new Point(200, 100), new Size(50, 50), "Button 4")); 

     try 
     { 
      using(Stream st = File.Open("btnSettings.bin", FileMode.Create)) { 
       BinaryFormatter bf = new BinaryFormatter(); 
       bf.Serialize(st, btnAttr); 
      } 
     } 
     catch (Exception ex) { 
      MessageBox.Show(ex.Message, "Exception"); 
     } 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     try { 
      using (Stream st = File.Open("btnSettings.bin", FileMode.Open)) { 
       BinaryFormatter bf = new BinaryFormatter(); 

       var btnAttr2 = (List< btnAttrib>)bf.Deserialize(st); 
       foreach(btnAttrib btAtt in btnAttr2) { 

        Button nBTN = new Button(); 
        nBTN.Location = btAtt.LocationBTN; 
        nBTN.Size = btAtt.SizeBTN; 
        nBTN.Name = btAtt.NameBTN; 

        this.Controls.Add(nBTN); 
       } 
      } 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message, "Exception"); 
     } 
    } 

Это самая лучшая идея для сохранения пользовательских элементов управления?

+0

Любопытно, почему вы хотели бы это сделать? –

+0

Что вы пытаетесь сохранить, события, свойства или что? Для кнопки больше нечего добавить, поскольку вы можете воссоздать ее, восстановив свойства. –

+0

Я с @ p.campbell - почему ты хочешь это сделать? –

ответ

2

ответ является неопределенным «да», путем сериализации его свойств/настроек вы можете иметь иллюзию, что вы сохраняете элемент управления в базе данных.

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