我可以使用构造函数动态创建用户控件吗?

Posted

技术标签:

【中文标题】我可以使用构造函数动态创建用户控件吗?【英文标题】:Can I dynamically create user controls using constructors? 【发布时间】:2012-07-12 13:30:46 【问题描述】:

我有一个用户控件,它会根据用户偏好动态添加其他用户控件。我在使用重载的 LoadControl 方法添加控件时遇到问题。

我试过这样做:

ddControl = typeof(DropDownControl), new object[]  testData, FilterModel.Models[i] );

但是,ddControl 中的所有控件都未初始化,当我尝试将数据源设置为它包含的组合框时,它爆炸了。我将模型和数据源传递给设置属性、默认值等的构造函数。在创建控件后是否必须创建 LoadModel() 方法来加载模型值

(DropDownControl)LoadControl("~/WebUserControls/DropDownControl.ascx")

或者我可以在动态声明它的同时以某种方式通过构造函数完成这一切吗?

如果不清楚,请告诉我如何做到这一点。谢谢!

【问题讨论】:

网络表单和用户控件对构造函数注入过敏。最好的办法是添加一个在 LoadControl 之后调用的方法来进行注入。 【参考方案1】:

您可以使用PlaceHolder 动态添加这些用户控件并通过公开一个方法来执行其他操作,这样您就可以更好地控制所有内容,而不会影响控件的生命周期。

不要使用构造函数,而是使用属性和方法。

【讨论】:

以上是关于我可以使用构造函数动态创建用户控件吗?的主要内容,如果未能解决你的问题,请参考以下文章

创建自定义控件并将其加载到 FormView

可以在C ++中使用动态分配的参数数创建函数吗?

用户控件动态创建添加

如何允许用户在他选择的位置拖动动态创建的控件

winform用户控件动态创建添加控件timer控件控件联动

用户控件,动态创建添加用户控件