我可以在c#中删除标签,richtextbox吗?单击按钮时?

时间:2016-11-24 05:33:59

标签: c#

我通过一个通过数组构建的按钮动态创建了LabelRichTextBox

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();
}

这可能吗?

2 个答案:

答案 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)