![](/img/trans.png)
[英]How to (C#) : Dynamically Create multiple controls on add click and access their properties
[英]C# - How to add and delete multiple controls dynamically on button click
我正在嘗試編寫一個調查應用程序,該應用程序要求動態添加和刪除文本框。 我設法在單擊按鈕時動態創建了文本框,但是我試圖找出如何動態刪除文本框。 當前,只有當我從上一個開始刪除文本框時,刪除功能才能正常工作。 當我嘗試刪除中間的任何文本框,然后刪除最后一個文本框時,將創建一個空白文本框。 我是編程新手,不能確定這是否是最佳方法。 另外,我想找出是否有可能將文本框嵌套(允許用戶向其選擇題添加選項)到創建的文本框並稍后再檢索值。
后面的代碼:
public partial class Dynamic_Form : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
for (int i = 0; i < TotalNumberAdded; ++i)
{
AddQuestion(i + 1);
}
}
protected int TotalNumberAdded
{
get { return (int)(ViewState["TotalNumberAdded"] ?? 0); }
set { ViewState["TotalNumberAdded"] = value; }
}
protected void btn_add_Click(object sender, EventArgs e)
{
TotalNumberAdded++;
AddQuestion(TotalNumberAdded);
}
private void AddQuestion(int controlNumber)
{
Panel newquestion = new Panel();
newquestion.ID = "Panel_" + controlNumber;
TextBox questionbox = new TextBox();
questionbox.ID = "Question_" + controlNumber;
questionbox.Text = "Question";
Button BtnDelete = new Button();
BtnDelete.ID = "BtnDelete_" + controlNumber;
BtnDelete.Text = "Delete"+ controlNumber;
BtnDelete.Click += delete_Click;
DropDownList DDLType = new DropDownList();
DDLType.ID = "DDLType_" + controlNumber;
DDLType.Items.Insert(0, new ListItem("TextField", ""));
DDLType.Items.Insert(1, new ListItem("Multiple Choice", ""));
//add controls
questions.Controls.Add(newquestion);
newquestion.Controls.Add(questionbox);
newquestion.Controls.Add(DDLType);
newquestion.Controls.Add(BtnDelete);
}
private void delete_Click(object sender,EventArgs e)
{
Button btn = (Button)sender;
Control control = btn.Parent;
if (questions.Controls.Contains(control))
{
questions.Controls.Remove(control);
control.Dispose();
TotalNumberAdded--;
Response.Write("Number of Questions:" + TotalNumberAdded);
}
}
}
HTML文件:
<body>
<form id="form1" runat="server">
<div>
<h1>Test Form</h1>
<asp:Button ID="btn_add" runat="server" Text="Add" OnClick="btn_add_Click" />
</div>
<div id="questions" runat="server">
</div>
</form></body>
。
@Aaron Yong,您也可以使用jQuery或javascript從客戶端執行這些方案。 我已經給出了以下代碼,以實現服務器端的目標。
private void delete_Click(object sender,EventArgs e)
{
Button btn = (Button)sender;
Control control = btn.Parent;
if (questions.Controls.Contains(control))
{
TotalNumberAdded--;
questions.Controls.Clear();
for (int i = 0; i < TotalNumberAdded; ++i)
{
AddQuestion(i + 1);
}
Response.Write("Number of Questions:" + TotalNumberAdded);
}
}
您想要再次重新創建控件,我添加了for循環並在delete click事件中刪除了一些代碼,那么您將實現。
正如我上面給出的答案,您還可以從以前的答案中刪除下面的代碼。
questions.Controls.Remove(control);
control.Dispose();
您將得到確切的答案
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.