共有/静的関数内でコントロールを動的にロードする方法を知っている人はいますか? 関数自体は mustinherit/abstract クラス内にあります。(これは VB の ASP.NET プロジェクトです) 次のようなことをしたい:
VB:
Public Shared Function GetWidget(ByVal name As WidgetName) As Control
Select Case name
Case WidgetName.Name1
Return LoadControl("~/Control1.ascx")
Case WidgetName.Name2
Return LoadControl("~/Control2.ascx")
Case WidgetName.Name3
Return LoadControl("~/Control3.ascx")
End Select
End Function
私のC#は少しさびているので、これにはいくつかの構文エラーがあるかもしれません:
Public Static Control GetWidget(WidgetName name)
{
switch (name)
{
Case WidgetName.Name1:
return LoadControl("~/Control1.ascx");
break;
Case WidgetName.Name2:
return LoadControl("~/Control2.ascx");
break;
Case WidgetName.Name3:
return LoadControl("~/Control3.ascx");
break;
}
}
(WidgetName は列挙子です。)
「クラスの明示的なインスタンスなしでは、共有メソッドまたは共有メンバー初期化子内からクラスのインスタンス メンバーを参照できません。」というメッセージが表示されますが、このエラーがわかりません。私はそれが何を意味するのか理解していますが、LoadControl の呼び出しがコンパイラによってクラスの明示的なインスタンスとして認識されない理由がわかりません。LoadControl を使用してファイルから新しいコントロールを作成することについて、明示的でないことは何ですか? 新しいユーザー コントロールを作成して初期化し、LoadControl を使用して別のコントロールに設定しようとしましたが、役に立ちませんでした。また、DirectCast を実行したくありません。これを共有のマストインヘレット (抽象) クラスに配置しようとしているためです<%@ Reference Control="~/SomeControlPath.ascx" %>
。
私がやろうとしているのは、何らかの値を取り、そのコントロールのソース ファイルの場所のみに基づいてコントロールを返す静的関数を作成することです。最終結果は、ユーザーが変更可能なコントロールのリストです。私が指定した使用可能な子コントロールの静的リストに基づいて、自由に追加、削除、または並べ替えを行うコントロールの列を取得します。私はこのアプローチと結婚していません。いろいろな意味で本当に間違っているかもしれません。
ええ、そこにある静的文字列にはコードの匂いがあることは知っていますが、実際にはそのようには見えません。質問をするために単純化しています。
C#、VB、または平易な英語の説明はすべて歓迎します。