C# 如何删除动态生成按钮的RichTextBox?

C# 如何删除动态生成按钮的RichTextBox?,c#,winforms,C#,Winforms,我正在生成一个RichTextBox和一个带有另一个按钮的按钮。单击生成的按钮时,我想删除RichTextBox及其本身 static int i = 1; private void generate_Click(object sender, EventArgs e) { RichTextBox text = new RichTextBox(); Button delete = new Button(); this.Controls.Add(text

我正在生成一个RichTextBox和一个带有另一个按钮的按钮。单击生成的按钮时,我想删除RichTextBox及其本身

static int i = 1;

private void generate_Click(object sender, EventArgs e)
{            
   RichTextBox text = new RichTextBox();
   Button delete = new Button();

   this.Controls.Add(text);
   this.Controls.Add(delete);
   i++;
}

可以从窗体中删除控件,如下所示:

private void generate_Click(object sender, EventArgs e)
{            
  RichTextBox text = new RichTextBox();
  Button delete = new Button();

  this.Controls.Add(text);
  this.Controls.Add(delete);
  i++;

  //---- Remove Part --------

  this.Controls.Remove(text);

  //------------------------
}

我希望这对您有所帮助。

您可以在表单中声明该字段

RichTextBox m_Control;
然后,分配它

private void generate_Click(object sender, EventArgs e)
{            
    RichTextBox text = new RichTextBox();
    Button delete = new Button();
    m_Control = text;

    this.Controls.Add(text);
    this.Controls.Add(delete);
    i++;
}
当您需要删除它时,您可以这样做

this. Controls. Remove(m_Control) ;

您可以将控件的名称设置为delete方法可用于以后查找控件的名称。您还可以将对控件的引用存储在delete方法可以使用的类成员中。这可能有助于您的声明位于错误的范围内。“text”和“delete”(顺便说一句,糟糕的名字)应该在表单级别声明。使用
text.Dispose()
delete.Dispose()以摆脱它们。仅调用
this.Controls.Remove(…)
是不够的,因为它会将控件保留在内存中。您确实需要对添加的控件调用
Dispose()
。+在这里,你没有卸下按钮。处置这两者,这也将从父容器中移除它们。您还可以使用Lambda,类似于:
delete.Click+=(o,evt)=>{text.Dispose();delete.Click-=(obj,ev)=>{};delete.Dispose();}