我正试图通过按下按钮逐个删除文本框和标签。 我有一个名为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并没有做任何事情。
答案 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>();