1

次のように、動的に指定されたユーザー コントロールを親 (ユーザー) コントロールのプレースホルダーにロードしています。

// 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オブジェクトが必要なため、直接使用することはできません。

4

2 に答える 2

3

これらすべてを に変換することはできませんControlか?

phChart.Controls.Add((Control)_chartControl);
于 2012-08-23T12:33:47.307 に答える
2

すべてのコントロールはControl基本クラスから派生していると思います。_chartControlそれなら、にキャストしてControl追加してみませんか。

_chartControl = (Control)LoadControl(chartClassName + ".ascx");
phChart.Controls.Add(_chartControl);
于 2012-08-23T12:36:15.923 に答える