簡體   English   中英

刪除按鈕上的文本框/標簽,單擊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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM