我通过一个通过数组构建的按钮动态创建了Label
,RichTextBox
。
Label dateLabel = new Label();
dateLabel.Text = dateArray[i];
dateLabel.Name = "date" + i;
dateLabel.Location = new Point(154, 5 + (50 * i));
dateLabel.Tag = dateLabel;
dateLabel.Size = new System.Drawing.Size(91, 20);
panel1.Controls.Add(dateLabel);
RichTextBox placeTravelLabel = new RichTextBox();
placeTravelLabel.Text = placeTravelArray[i];
placeTravelLabel.Name = "placeTravel" + i;
placeTravelLabel.Location = new Point(272, 5 + (50 * i));
placeTravelLabel.Tag = placeTravelLabel;
placeTravelLabel.Size = new System.Drawing.Size(148, 45);
placeTravelLabel.ReadOnly = true;
panel1.Controls.Add(placeTravelLabel);
Button clearButton = new Button();
clearButton.Name = "clearButton" + i;
clearButton.Text = "Remove";
clearButton.Location = new Point(1200, 5 + (30 * i));
clearButton.Click += new EventHandler(this.clearButton_Click);
panel1.Controls.Add(clearButton);
现在我希望他们成为remove
这样的东西。
public void clearButton_Click(object sender, EventArgs e)
{
dateLabel.Remove();
placeTravelLabel.Remove();
}
这可能吗?
答案 0 :(得分:1)
是的,确实如此。尝试
panel1.Controls.Remove(dateLabel);
panel1.Controls.Remove(placeTravelLabel);
您显然需要在创建它们时保留对它们的引用(即将它们声明为类中的字段)或以某种方式标记它们(例如在Tag
属性中)并枚举panel1.Controls
以找到它们后面。
我认为通过将按钮的click事件定义为lambda也可以在本地实例上使用闭包,以避免将这些控件声明为字段。我不推荐这个,因为典型的流程更具可读性和直接性。话虽如此:
Label dateLabel = new Label();
//...
panel1.Controls.Add(dateLabel);
RichTextBox placeTravelLabel = new RichTextBox();
//...
panel1.Controls.Add(placeTravelLabel);
Button clearButton = new Button();
//...
clearButton.Click += new EventHandler((s, e) =>
{
panel1.Controls.Remove(dateLabel);
panel1.Controls.Remove(placeTravelLabel);
});
panel1.Controls.Add(clearButton);
答案 1 :(得分:0)
这是使用LinqPad构建的伪代码,但应该足以让你使用。
我假设你正在使用WinForms,因为没有标签可以说它是否是WPF的Winforms,但这是你需要的代码,它会为你删除标签。
var frm = new Form();
var lbl = new Label();
lbl.Name = "myLable"
frm.Controls.Add(lbl)
frm.Controls.Remove(lbl)
如果忽略声明的前两行,则只需要`FormName.Controls.Remove(LabelName)