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

标签 c# .net vb.net dynamic controls

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

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/

相关文章:

c# - 如何使用 viewmodel (IEnumerable) 在 ASP.NET MVC 4 中更新我的数据库

c# - 使用opencv c#检测图像中的文本 block

c# - ASP.Net MVC 应用程序看似忽略数据库连接字符串

c# - 如何将自定义动画添加到 ContextMenuStrip?

vb.net - 从 VB6 转换为 VB.Net 后字符串默认参数值问题

c# - 通过层次结构的 PostSharp 和方面继承

c# - 查找任何文件编码的有效方法

c# - 超时立即取消阻塞操作

c# - Azure Function 无法与 QueueTrigger 和非 void 返回值一起使用?

asp.net-mvc - 内联如果在Razor View 中