删除按钮上的文本框/标签单击C#

时间:2016-10-23 07:45:28

标签: c# winforms

我正试图通过按下按钮逐个删除文本框和标签。 我有一个名为inputTextBoxes的文本框列表。

以下是添加的代码:

var myBtn = dom.byId("myBtn");
on(myBtn, "click", function (e) {
    console.log("clicked!");
});

要删除我正在尝试:

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++;
    }

但是它只删除了添加的最后一个文本框,单击按钮上的againg并没有做任何事情。

2 个答案:

答案 0 :(得分:2)

您不断在OnClickAdd()方法中创建新列表:

FROM ruby:2.3.0
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs

ENV APP_HOME /app

RUN mkdir $APP_HOME  
WORKDIR $APP_HOME


ADD Gemfile* $APP_HOME/ 
RUN bundle install


ADD . $APP_HOME

尝试检查inputTextBoxes是否为null,然后才执行此行代码。否则,只需运行其余代码即可。 另外,请记住在onClickRemove()方法完成删除文本框/标签后清除inputTextBoxes列表。

答案 1 :(得分:1)

您希望一次只删除一个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);
     }
 }

请确保将其从inputTextBox中删除,以便下次您要求删除TextBox时,它不会再尝试将其删除并继续下一个。

修改

@Piotr Nowak指出了另外一个问题,每次添加新TextBox时都为inputTextBox分配一个新列表,你应该在创建类时只分配一次列表。

从onClickAdd方法中删除它:

inputTextBoxes = new List<TextBox>();

当你将列表声明为你的班级字段时使用它:

private readonly inputTextBoxes = new List<TextBox>();