我正在開發一個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我需要這個爲我的項目 –