在运行时向窗体添加控件时,您可以执行以下任一操作:
Button btn = new Button();
//...
this.Controls.Add(btn);
或
Button x = new Button();
//...
btn.Parent = this;
我原以为它们是一样的,这完全取决于个人喜好,但是工作中有人提到第二种方法更糟糕,因为在处理表单时按钮不会被处理(假设没有添加和保留任何事件处理程序)。
这对我来说意义不大,所以我上网看了看,但找不到任何可以说的东西。
有人知道答案或可以指出正确的方向吗?
最佳答案
因为推测是浪费时间,所以我捕获了我的 Reflector 副本并查看了实际代码。 Parent 属性调用 ParentInternal 属性,后者又调用 value.Controls.Add(this)
/* this code is part of the .NET Framework was decompiled by Reflector and is copyright Microsoft */
internal virtual Control ParentInternal
{
get
{
return this.parent;
}
set
{
if (this.parent != value)
{
if (value != null)
{
value.Controls.Add(this);
}
else
{
this.parent.Controls.Remove(this);
}
}
}
}
基于此代码,这些方法是等效的,这完全是一个偏好问题。
关于c# - 在运行时添加控件的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/970704/