2016-06-08 150 views
2

我想实现一个删除按钮,删除其他几个控件,如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(); 
} 

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

+0

所以你想要一个标签与多个按钮assignmets? – DDave

+0

您只能访问第一个控件。如果你想删除所有的控件,你可以得到所有的控件,并通过控件循环删除它们。或者,如果您想要删除特定控件而不是循环检查类型的控件,并将其删除。 – Mairaj

+0

@DDave是啊,如果可能的话,或任何其他方式删除多个控件只有一个按钮。 – Pow4Pow5

回答

1

试试这个;通过可用的控制迭代和删除删除根据病情

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

这是不正确的,您正在修改您正在迭代的集合。这个错误会导致控件被跳过,它不能找到一个被放置的控件。您必须制作集合的副本或向后迭代。 –

+0

@HansPassant:明亮的地方'它找不到一个是在处理完之后.'我将检查尝试找到解决方案并更新答案 - 谢谢 –

+1

只需使用'this.Controls.OfType ().ToList ()'来快速修复。 –

-1

你可以简单地做

this.Controls.Remove(btn); 

或者,如果你想删除所有

this.Controls.RemoveAll(); 

不要忘了控件在容器中,所以你也可以这样做,删除所有的兄弟姐妹

btn.Parent.Controls.RemoveAll();