根据 Class 删除控件
Delete controls based on their Class
我需要删除 TableLayoutPanel 中的一些控件。下面的代码适用于按钮:
private void RemoveButtons()
{
for (int i = TablePanel.Controls.Count - 1; i >= 0; i--)
{
if (TablePanel.Controls[i] is Button)
TablePanel.Controls[i].Dispose();
}
}
但是,在其他情况下我需要删除面板,用户控件等。如何更改上面的代码以一种方法基于控件的Class删除控件?
private void RemoveControls(Type class)
{
for (int i = TablePanel.Controls.Count - 1; i >= 0; i--)
{
if (TablePanel.Controls[i] is class)
TablePanel.Controls[i].Dispose();
}
}
对每个控件的类型使用 IsAssignableFrom()
。
private void RemoveControls(Type type)
{
for (int i = TablePanel.Controls.Count - 1; i >= 0; i--)
{
var controlType = TablePanel.Controls[i].GetType();
if (type.IsAssignableFrom(controlType))
TablePanel.Controls[i].Dispose();
}
}
你可以这样做:
private void RemoveControls<T>() where T : Control
{
for (int i = TablePanel.Controls.Count - 1; i >= 0; i--)
{
if (TablePanel.Controls[i] is T)
TablePanel.Controls[i].Dispose();
}
}
然后你会像这样使用它:
RemoveControls<Button>();
或
RemoveControls<Label>();
但是您需要记住,Dispose
-ing 控件不会将其从控件中删除,它只是将其丢弃。如果您真的想从控件对象中删除它们,请执行以下操作:
private void RemoveControls<T>() where T : Control
{
var controlsOfT = TablePanel.Controls.OfType<T>().ToList();
controlsOfT.ForEach((c) =>
{
TablePanel.Controls.Remove(c);
c.Dispose();
});
}
它既将它们从 Controls
集合中移除又将它们丢弃。
我需要删除 TableLayoutPanel 中的一些控件。下面的代码适用于按钮:
private void RemoveButtons()
{
for (int i = TablePanel.Controls.Count - 1; i >= 0; i--)
{
if (TablePanel.Controls[i] is Button)
TablePanel.Controls[i].Dispose();
}
}
但是,在其他情况下我需要删除面板,用户控件等。如何更改上面的代码以一种方法基于控件的Class删除控件?
private void RemoveControls(Type class)
{
for (int i = TablePanel.Controls.Count - 1; i >= 0; i--)
{
if (TablePanel.Controls[i] is class)
TablePanel.Controls[i].Dispose();
}
}
对每个控件的类型使用 IsAssignableFrom()
。
private void RemoveControls(Type type)
{
for (int i = TablePanel.Controls.Count - 1; i >= 0; i--)
{
var controlType = TablePanel.Controls[i].GetType();
if (type.IsAssignableFrom(controlType))
TablePanel.Controls[i].Dispose();
}
}
你可以这样做:
private void RemoveControls<T>() where T : Control
{
for (int i = TablePanel.Controls.Count - 1; i >= 0; i--)
{
if (TablePanel.Controls[i] is T)
TablePanel.Controls[i].Dispose();
}
}
然后你会像这样使用它:
RemoveControls<Button>();
或
RemoveControls<Label>();
但是您需要记住,Dispose
-ing 控件不会将其从控件中删除,它只是将其丢弃。如果您真的想从控件对象中删除它们,请执行以下操作:
private void RemoveControls<T>() where T : Control
{
var controlsOfT = TablePanel.Controls.OfType<T>().ToList();
controlsOfT.ForEach((c) =>
{
TablePanel.Controls.Remove(c);
c.Dispose();
});
}
它既将它们从 Controls
集合中移除又将它们丢弃。