在运行时添加控件的最佳实践

Pon*_*dum 9 .net c# vb.net controls dynamic

在运行时向表单添加控件时,您可以执行以下任一操作:

Button btn = new Button();
//...
this.Controls.Add(btn);
Run Code Online (Sandbox Code Playgroud)

要么

Button x = new Button();
//...
btn.Parent = this;
Run Code Online (Sandbox Code Playgroud)

我曾经假设它们是相同的,这只是个人偏好的方式来做,但是有人在工作中提到第二种方法更糟糕,因为当表格处理时按钮不会被处理掉(假设没有事件)处理程序已被添加并被保留).

这对我来说没有多大意义,所以我在网上看了一下,但找不到任何说法.

有人知道答案还是能指出我正确的方向?

Jac*_*ing 12

由于推测是浪费时间,我抓住了我的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);
                }
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

基于此代码,方法是等效的,这完全是优先考虑的问题.

  • 出于支持目的,.Parent比.ControlsAdd()更难阅读和解释; (3认同)