我正在开发一个Windows窗体项目,要求用户通过单击按钮添加新字段(文本框和标签),我想实现的是。用户添加一个新字段后,会自动创建一个文本框并将其保存到我的表单的设置中。所以,当我再次运行我的项目。新添加的文本框(从运行时)可用。有没有可能的方法来做到这一点?我是新来的C#提前致谢!在运行时添加文本框并保存更改
回答
你试试这个
数据表里面System.Data
using System.Data;
保存为XML
private void button1_Click(object sender, EventArgs e)
{
DataTable dt = new DataTable("Settings"); //we use DataTable class
dt.Columns.Add("ID");
dt.Columns.Add("Control");
dt.Columns.Add("ControlName");
dt.Columns.Add("Top");
dt.Columns.Add("Left");
dt.Columns.Add("Width");
dt.Columns.Add("Height");
/*
* You add more settings here
*/
int id = 0;
foreach (Control ctrl in this.Controls) //this.Controls is the parent control where the textbox is located
{
string c = ctrl.GetType().Name;
switch (c)
{
case "TextBox":
DataRow dr = dt.NewRow();
dr["ID"] = id++;
dr["Control"] = c;
dr["ControlName"] = ctrl.Name;
dr["Top"] = ctrl.Top;
dr["Left"] = ctrl.Left;
dr["Width"] = ctrl.Width;
dr["Height"] = ctrl.Height;
/*
* You add more settings here
*/
dt.Rows.Add(dr);
break;
}
}
dt.WriteXml(@"c:\TestFile.xml", XmlWriteMode.WriteSchema); //You can use save dialog to browse the location
}
要检索
private void button2_Click(object sender, EventArgs e)
{
DataTable dt = new DataTable("Settings");
dt.ReadXml(@"c:\TestFile.xml");
foreach (DataRow dr in dt.Rows)
{
switch (dr["Control"].ToString())
{
case "TextBox":
var t = new TextBox();
t.Name = dr["ControlName"].ToString();
t.Top = Convert.ToInt32(dr["Top"]);
t.Left = Convert.ToInt32(dr["Left"]);
t.Width = Convert.ToInt32(dr["Width"]);
t.Height = Convert.ToInt32(dr["Height"]);
this.Controls.Add(t);
break;
}
}
}
添加一些错误陷阱,以防万一。 :) – Jade
为了实现这一点,您必须创建自己的结构以保存设置或任何外部xml文件。例如,您可以创建一个名为“name”和“text”字段的类,然后使用List listOfBoxes创建该类的通用列表,并将其序列化为XML文件以供后续反序列化。
当您阅读XML文件时,只需遍历列表并为每个项目创建一个文本框和标签,然后创建并添加到父容器控件之后,我建议您使用flowlayout作为容器控制,或者你将不得不计算控制的xy坐标
如果你不知道如何做任何这些步骤就问我。
使用文件或设置的insted的,你也可以使用一个DATABSE表来存储数据控制
感谢您的答复!是的,请你可以告诉我如何使用XML文件做到这一点?并将控件存储在数据库中。谢谢! –
....
btn.Click += new Event Handler(AddTextBox);
....
public void AddTextBox(Object o, EventArgs e) {
TextBox newTextBox = new TextBox();
newTextBox.Location = new Point(...);
Controls.Add(newTextBox);
}
至于保存控件以备将来使用,你可以简单地保存控件的类型和位置。如前所述,这可以在数据库中完成,或者您可以选择xml或简单的自己格式的文本文件。
谢谢你的回复。但我想保存文本框。所以当我再次运行我的应用程序时,从运行时创建的文本框是可用的。 –
我之前做过类似的事情。我用的是面板,并且代码是这样的:
private void panel1_MouseDoubleClick(object sender, System.Windows.Forms.MouseEventArgs e)
{
System.Windows.Forms.TextBox txtbox = new System.Windows.Forms.TextBox();
txtbox.Location = e.Location; //Creates the textbox where user double clicked
panel1.Controls.Add(txtbox);
txtbox.Focus();
txtbox.Visible = true;
}
您可以设置Left
和任何你想要的文本框的Top
。为了存储文本框,您必须创建一个表格并存储每个文本框的详细信息(内容,位置等)。稍后打开表单时,应从表格中读取这些详细信息并创建这些文本框。 对于保存文本框:
foreach (Control c in panel1.Controls)
{
if (c.GetType().Name == "TextBox")
{
//Save the texbox content,Leftposition,RightPosition,etc to database
}
}
在form_Load
:
private void MyForm_Load(object sender, EventArgs e)
{
//Retrieve all textbox details from table as dataset.
for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
{
System.Windows.Forms.TextBox txtbox = new System.Windows.Forms.TextBox();
txtbox.Text = ds.Tables[0].Rows[i]["Content"].ToString();
txtbox.Left = Convert.ToInt32(ds.Tables[0].Rows[i]["Left"].ToString());
txtbox.Top = Convert.ToInt32(ds.Tables[0].Rows[i]["Top"].ToString());
panel1.Controls.Add(txtbox);
txtbox.Visible = true;
}
}
你必须创建一个表,如:
Content Left Top
NameA 100 100
NameB 132 241
NameC 242 311
我希望保存从运行时创建的文本框。所以当我再次运行我的项目。文本框被保存 –
查看编辑答案 –
- 1. 在运行时更改并保存标签文本
- 2. 在c#中运行时保存动态添加的文本框如何?
- 3. 在运行时加载并保存.sdf
- 4. VB6:保存多行文本框并加载保存的输入?
- 5. 更改/切换WPF文本框的文本dataBinding在运行时
- 6. 在运行时更改绑定并保存类实例WPF
- 7. 如何动态地添加文本框并保存在asp.net
- 8. 阅读运行时添加文本框的文本
- 9. 在图像上添加多行文本并将其保存
- 10. 在添加新的文本内容并在.html文件中保留更改后文件/保存HTML文档
- 11. 如何在运行时添加动态更改的脚本?
- 12. 在运行时在mvc3中添加和删除文本框
- 13. 在运行时加载脚本并确保加载脚本
- 14. 在运行时更改对话框按钮的文本Qt
- 15. 在运行时更改对话框中的静态文本
- 16. 在运行时用一个新类更改按钮/文本框
- 17. 更改文本框的颜色并在Javascript验证中添加文本
- 18. xpages保存文档时运行脚本
- 19. 在运行时将文本框值添加到网格
- 20. 运行PHP脚本时,在HTML文本框中输入文本更改
- 21. 如何知道何时更改文本框而不保存
- 22. 改变富文本框的颜色并在输入时添加文本
- 23. 如何使用PHP添加动态文本框(行)并保存到数据库
- 24. 保存运行时创建的文本框的值
- 25. 运行时更改DataGridView标题文本
- 26. 如何在本地更改css样式并保存此更改
- 27. 在运行时更改水晶报表文本对象文本
- 28. 在运行时更改文本网格的文本值
- 29. 其他文本框文本更改时更改文本框的文本
- 30. 如何让XCode 4在保存更改时自动生成并运行代码?
的WinForms,WebForms的,WPF? –
它看起来像你需要点击事件创建文本框控件,填充它并添加到形式 – Grundy
Windows从pls我需要这个为我的项目 –