【问题标题】:Delete Button that deletes several controls删除多个控件的删除按钮
【发布时间】:2023-03-09 02:15:01
【问题描述】:

我正在尝试实现一个删除按钮,该按钮可以删除与该按钮相关的几个其他控件,例如 textboxcombobox。现在,我只用tag函数删除了一个控件就成功了,如下:

private void deleteControl(object sender, MouseEventArgs e)
{
   Button btn = (Button)sender;

   TextBox txtbox = (TextBox)this.Controls.Find(btn.Tag.ToString(), true)[0];
   txtbox.Dispose();
}

上面的代码是我实现的函数中的代码 sn-p。但是,我只能使用此方法删除 1 个Control,因为我只能将一个Control 标记为我的删除button。那么如果我想使用删除button删除2个控件我应该如何实现呢?

【问题讨论】:

  • 所以你想要一个带有多个按钮分配的标签?
  • 您只访问第一个控件。如果要删除所有控件,您可以获取所有控件并循环访问控件以删除它们。或者,如果您想删除特定控件而不是循环检查控件类型并将其删除。
  • @DDave 是的,如果可能的话,或者以任何其他方式只需一个按钮即可删除多个控件。
  • 这是一个什么样的应用程序? winforms/wpf?
  • Windows 窗体应用程序@un-lucky

标签: c# button controls


【解决方案1】:

试试这个;遍历可用控件,根据条件删除Delete

foreach (Control ctrl in this.Controls.OfType<Control>().ToList())
{
    if ((ctrl.GetType() == typeof(TextBox) || ctrl.GetType() == typeof(ComboBox))
        && ctrl.Tag.ToString() == btn.Tag.ToString())
    {
        ctrl.Dispose();
    }
}

【讨论】:

  • 这不正确,您正在修改您正在迭代的集合。此错误将导致控件被跳过,它找不到在已处理的控件之后的控件。您必须复制集合或向后迭代。
  • @HansPassant:精彩点it can't find one that's after the one that's is disposed. 我会检查尝试找到解决方案并更新答案-谢谢
  • 只需使用this.Controls.OfType&lt;Control&gt;().ToList() 即可快速修复。
  • @HansPassant:感谢您提供的新信息;我已经更新了答案
【解决方案2】:

你可以这样做

this.Controls.Remove(btn);

或者如果你想全部删除

this.Controls.RemoveAll();

不要忘记控件位于容器中,因此您也可以这样做以删除所有同级

btn.Parent.Controls.RemoveAll();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-14
    • 2023-03-24
    • 2016-07-15
    • 1970-01-01
    相关资源
    最近更新 更多