一种解决方案可能是使用StringCollection
用户设置(编辑:在您的评论中,您说关闭应用程序时不会保留此设置。这不是真的,因为这是使用用户设置的全部意义......)。
在每一行中,您需要将控件的位置和名称保存为字符串,例如
120;140;MyName
当用户添加一个新按钮时,StringCollection
像这样创建一个项目:
private void make_BookButtonAndStore(int x, int y, string name)
{
make_Book(x,y,name);
Properties.Settings.Default.ButtonStringCollection.Add(String.Format("{0};{1};{2}", book1.Location.X, book1.Location.Y, book1.Name));
Properties.Settings.Default.Save();
}
private void make_Book(int x, int y, string name)
{
// this code is initializing the book(button)
Button book1 = new Button();
Image img = button1.Image;
book1.Image = img;
book1.Name = name;
book1.Height = img.Height;
book1.Width = img.Width;
book1.Location = new Point(44 + x, 19 + y);
book1.Click += new EventHandler(myClickHandler);
groupBox1.Controls.Add(book1);
}
然后,您需要StringCollection
通过读取每一行,提取位置和名称并make_book
再次调用来从每个项目创建按钮的代码(不是我的新make_BookButtonAndStore
方法,因为这会使按钮加倍)。
请注意,您可能需要在添加第一个按钮之前StringCollection
使用关键字创建。new
编辑
解释如何创建这样的设置:转到您的项目属性到“设置”选项卡。创建一个名为的新设置ButtonStringCollection
,选择类型System.Collections.Specialized.StringCollection
和范围User
。
在表单的构造函数中,添加以下行:
if (Properties.Settings.Default.ButtonStringCollection == null)
Properties.Settings.Default.ButtonStringCollection = new StringCollection();
然后,添加我上面提供的代码来创建按钮。此外,在表单的Load
事件处理程序中,添加如下内容:
foreach (string line in Properties.Settings.Default.ButtonStringCollection)
{
if (!String.IsNullOrWhitespace(line))
{
// The line will be in format x;y;name
string[] parts = line.Split(';');
if (parts.Length >= 3)
{
int x = Convert.ToInt32(parts[0]);
int y = Convert.ToInt32(parts[1]);
make_Book(x, y, parts[2]);
}
}
}