将用户控件从类型名称转换为自定义控件类型?

时间:2012-08-23 12:32:29

标签: c# user-controls casting

我正在将动态指定的用户控件加载到父(用户)控件中的占位符中,如下所示:

// dynamically load instance of chosen chart control
string chartClassName = ConfigurationManager.AppSettings["ChartControlClass"];
_chartControl = (IOutputChart)LoadControl(chartClassName + ".ascx");
// add to place-holder
if (chartClassName == "OutputChart_Dundas") phChart.Controls.Add((OutputChart_Dundas)_chartControl);
else if (chartClassName == "OutputChart_Microsoft") phChart.Controls.Add((OutputChart_Microsoft)_chartControl);
else if (chartClassName == "OutputChart_Telerik") phChart.Controls.Add((OutputChart_Telerik)_chartControl);

显然,不必每次都明确地施放_chartControl变量更好 - 是否有更清洁的方法?每个用户控件都实现IOutputChart接口;但是,我不能直接使用它,因为Controls.Add()需要一个Control对象。

2 个答案:

答案 0 :(得分:3)

你能不能将所有这些转换为Control

phChart.Controls.Add((Control)_chartControl);

答案 1 :(得分:2)

我假设您的所有控件都来自Control基类。那么为什么不将_chartControl转换为Control并添加它。

_chartControl = (Control)LoadControl(chartClassName + ".ascx");
phChart.Controls.Add(_chartControl);