我在我的程序中多次重复使用相同的代码来清除屏幕,我想过把它变成一个类,但我仍然不知道类是如何工作的,以及如何正确地创建一个类。
清除按钮和其他控件的代码如下:
List<RichTextBox> _richTextBoxes = this.Controls.OfType<RichTextBox>().ToList();
List<Button> _buttons = this.Controls.OfType<Button>().ToList();
List<Label> _labels = this.Controls.OfType<Label>().ToList();
List<TextBox> _textBoxes = this.Controls.OfType<TextBox>().ToList();
foreach (var rich in _richTextBoxes)
{
this.Controls.Remove(rich);
}
foreach (var button in _buttons)
{
this.Controls.Remove(button);
}
foreach (var label in _labels)
{
this.Controls.Remove(label);
}
foreach (var textBox in _textBoxes)
{
this.Controls.Remove(textBox);
}
2条答案
按热度按时间nkcskrwz1#
正如其他人已经提到的,在运行时删除/创建容器(窗体、面板等)的所有控件是一种罕见的做法,可能会浪费PC资源。
当然您可以用途:
或者
但是,例如,将所有控件放在一个
Panel
中,然后简单地隐藏该面板,这有什么错呢?如果您选择此选项,它就像下面这行代码一样简单:
u1ehiz5o2#
隐藏数百或数千个控件既低效又浪费
与另一个答案的想法相反
...在某种程度上更有效,它不是。隐藏控件不会释放任何资源控件可能会请求明显的窗口句柄。句柄、字体等都是GDI池的一部分,这是一个相当有限的资源。根据您运行的Windows版本,您可能会被限制为256到16之间的任何值,每个进程384个GDI句柄。
所以在隐藏100个控件之前先想一想。最好是直接销毁不需要的控件,创建你需要的控件。
回到问题
我在程序中多次重复使用相同的代码来清除屏幕
更大的问题是 * 你为什么要这样做 *
虽然这是一个合理的编程场景,但考虑到 ”
but I still don't get how classes work
“,您不太可能处于 dynamic-UI-apps 阶段,例如,* 动态选择数据库表 *。考虑通过设计器创建多个窗体,并且不要在运行时修改它们。如果动态UI不是一个真正的要求,这会容易得多。
在运行时更改内容的更简单方法
否则,如果您非常希望在运行时继续更改内容,请考虑将所有控件放在属于窗体的子Panel中。
然后您可以直接调用Clear():