【问题标题】:How to remove RichTextBox with Button generated dynamically?如何使用动态生成的按钮删除 RichTextBox?
【发布时间】:2019-06-02 11:24:58
【问题描述】:

我正在生成一个 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++;
}

【问题讨论】:

  • 您可以将控件的名称设置为删除方法以后可以使用Find() 查找控件的名称。您还可以在删除方法可以使用的类成员中存储对控件的引用。
  • 您的声明在错误的范围内。 “文本”和“删除”(顺便说一句,名字很糟糕)应该在表单级别声明。使用text.Dispose();delete.Dispose(); 摆脱它们。仅仅调用this.Controls.Remove(...) 是不够的,因为它会将控件保留在内存中。

标签: c# winforms


【解决方案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++;

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

  this.Controls.Remove(text);

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

希望对你有帮助。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 你真的,真的需要在你添加的控件上调用Dispose()。 + 你没有删除按钮,在这里。处置两者,这也会将它们从父容器中移除。您也可以使用 Lambda,例如:delete.Click += (o, evt) => { text.Dispose(); delete.Click -= (obj, ev) => { }; delete.Dispose(); };
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-17
    • 2019-04-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多