[英]pass a textbox value to a label inside a grid view on a button click in asp.net 4 and C#
[英]Removing textbox/label on button click C#
我試圖刪除文本框並通過按一個按鈕一個標簽。 我有一個名為inputTextBoxes的文本框列表。
這是添加的代碼:
private void onClickAdd(object sender, EventArgs e)
{
inputTextBoxes = new List<TextBox>();
Label label1 = new Label();
label1.Name = "label1";
label1.Text = "w" + i;
label1.Location = new System.Drawing.Point(5, 10 + (20 * i));
label1.Size = new System.Drawing.Size(30, 20);
this.Controls.Add(label1);
TextBox text1 = new TextBox();
text1.Name = "text1";
text1.Location = new System.Drawing.Point(35, 10 + (20 * i));
text1.Size = new System.Drawing.Size(25, 20);
inputTextBoxes.Add(text1);
this.Controls.Add(text1);
i++;
}
對於刪除,我正在嘗試這樣做:
private void onClickRemove(object sender, EventArgs e)
{
foreach(TextBox text1 in inputTextBoxes)
{
this.Controls.Remove(text1);
}
}
但是它僅刪除最后添加的文本框,再次單擊按鈕沒有任何作用。
您將在OnClickAdd()方法中不斷創建一個新列表:
inputTextBoxes = new List<TextBox>();
嘗試檢查inputTextBoxes是否為null,然后再執行此行代碼。 否則,只需運行其余代碼即可。 另外,請記住在onClickRemove()方法完成刪除文本框/標簽后清除inputTextBoxes列表的操作。
您一次只想刪除一個TextBox,為什么需要一個foreach循環? 只需抓住最后一個或第一個TextBox,如果它不為null,則從控件中將其刪除:
private void onClickRemove(object sender, EventArgs e)
{
var textBoxToRemove = inputTextBoxes.LastOrDefault();
// or
// var textBoxToRemove = inputTextBoxes.FirstOrDefault();
if (textBoxToRemove != null)
{
this.Controls.Remove(textBoxToRemove);
inputTextBoxes.Remove(textBoxToRemove);
}
}
確保也將其從inputTextBoxes中刪除,因此下次您將要求刪除TextBox時,它將不會嘗試再次將其刪除並繼續進行下一個操作。
編輯
@Piotr Nowak指出了您遇到的另一個問題,每次添加新的TextBox時都要為inputTextBox分配一個新列表,創建類時只應分配一次列表。
從onClickAdd方法中刪除它:
inputTextBoxes = new List<TextBox>();
並將列表聲明為您的類的字段時使用此方法:
private readonly inputTextBoxes = new List<TextBox>();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.