我是C#的新手。我使用的是windows窗体和Form1,它包含两个按钮(一个在运行时创建用户控件,另一个在运行时创建用户控件上的按钮)。
如果您单击add_UserControl
按钮,此代码将创建用户控件和FlowLayoutPanel
(用于组织按钮位置)。然后,如果您单击Add_Buttons
按钮,它就会在FlowLayoutPanel
上创建按钮,这一切都在运行时完成。
现在在Form1
中,假设我创建了用户控件和FlowLayoutPanel
,然后创建了5个按钮,我如何将这个用户控件及其FlowLayoutPanel
和5个按钮的属性/详细信息保存在Form1
数据库中,以便以后运行程序时可以使用它们?我一直在想一个想法,然后我上网了,但没有运气。
有什么想法吗?请帮帮我。谢谢
public partial class Form1 : Form
{
FlowLayoutPanel FLP = new FlowLayoutPanel();
UserControl uc = new UserControl();
private void add_UserControl_Click(object sender, EventArgs e)
{
uc.Height = 700;
uc.Width = 900;
uc.BackColor = Color.Black;
Controls.Add(uc); //add UserControl on Form1
FLP.Height = 600;
FLP.Width = 800;
FLP.BackColor = Color.DimGray;
uc.Controls.Add(FLP); // add FlowLayoutPanel to UserControl
}
private void Add_Buttons_Click(object sender, EventArgs e)
{
//####### add buttons to FlowLayoutPanel ############
Button dynamicButton = new Button();
dynamicButton.Height = 50;
dynamicButton.Width = 200;
dynamicButton.BackColor = Color.Green;
dynamicButton.ForeColor = Color.Blue;
dynamicButton.Text = "";
FLP.Controls.Add(dynamicButton);
}
}
发布于 2016-01-24 17:53:00
好的,首先你需要创建一个类,用你需要的属性来表示其中一个按钮。
class MyButton
{
public string ButtonText {get;set;}
}
每次单击并创建按钮时,实际上都会创建此类的一个对象,并将其添加到集合或列表中。然后,您将有一些其他代码监视该集合,每次它获得一个新条目时,它都会创建一个新按钮,并将其button文本设置为text属性。当list的成员消失时,它会移除该按钮。
如果您需要记住更多属性(颜色、大小、字体等)您也可以将它们添加到类中。如果您还需要其他控件,...您始终可以创建公共的父控件。
很简单。
如果您希望能够重新加载它,可以将MyButton类定义为可序列化,并将其存储在xml文件中,然后在构建时重新加载它。
你应该注意WPF和它的MVVM模式。它和它非常相似。也可以看看命令模式,当它涉及到这一点时,请使用this模式。
发布于 2016-01-24 17:49:26
您可以在一个SQL表中记住FlowLayoutsPanels,在另一个表中可以保存属于这些FlowLayoutPanels的按钮。
在表单加载或应用程序加载时,您可以检查SQL db中是否已经存在FlowLayoutPanels和相应的按钮,如果存在,则创建它们,否则什么也不做。
https://stackoverflow.com/questions/34979107
复制