English 中文(简体)
有可能节省对数据库的用户控制
原标题:Is it possible to save a user control to the database

Is it possible to save a WinForms user control(ex: button) to the database? Or the only thing that can be saved is the settings property.

EDIT: Like what triggerX said. I tested the serializable idea.

<>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");
        }
    }

这是节省用户控制的最佳决定因素吗?

最佳回答

答案是模糊的“错误”,因为其财产/设定的序列化,你可能会有虚幻的印象,即你将控制权留给数据库。

问题回答

暂无回答




相关问题
Bring window to foreground after Mutex fails

I was wondering if someone can tell me what would be the best way to bring my application to the foreground if a mutex was not able to be created for a new instance. E.g.: Application X is running ...

How to start WinForm app minimized to tray?

I ve successfully created an app that minimizes to the tray using a NotifyIcon. When the form is manually closed it is successfully hidden from the desktop, taskbar, and alt-tab. The problem occurs ...

Linqy no matchy

Maybe it s something I m doing wrong. I m just learning Linq because I m bored. And so far so good. I made a little program and it basically just outputs all matches (foreach) into a label control. ...

Handle DataTable.DataRow cell change event

I have a DataTable that has several DataColumns and DataRow. Now i would like to handle an event when cell of this DataRow is changed. How to do this in c#?

Apparent Memory Leak in DataGridView

How do you force a DataGridView to release its reference to a bound DataSet? We have a rather large dataset being displayed in a DataGridView and noticed that resources were not being freed after the ...

ALT Key Shortcuts Hidden

I am using VS2008 and creating forms. By default, the underscore of the character in a textbox when using an ampersand is not shown when I run the application. ex. "&Goto Here" is not ...

WPF-XAML window in Winforms Application

I have a Winforms application coded in VS C# 2008 and want to insert a WPF window into the window pane of Winforms application. Could you explain me how this is done.

热门标签