2

これがC#で可能かどうかはわかりません:

私はuserControlプロパティを持っていますinputType-列挙型には、textBox、dropDownList、またはcheckBoxの3つの可能なオプションがあります。

次に、そのタイプの新しいオブジェクトを作成し、それをuserControlのプレースホルダーに追加します。

私がすることができます:

object txt;
    switch (_inputType)
    {
        case code.enums.inputType.textBox:
            txt = new TextBox();
            break;
        case code.enums.inputType.dropDownList:
            txt = new DropDownList();
            break;
        case code.enums.inputType.checkBox:
            txt = new CheckBox();
            break;
    }

ただし、Visual Studioがタイプを認識していないため、テキストボックス、ドロップダウンリスト、またはチェックボックスのプロパティにアクセスできません。また、オブジェクトをキャストすることもできません。オブジェクト(TextBox)txtがどれになるかわからないためです...

これを行う方法はありますか?または、すべてのコントロール固有の操作を実行することを検討する必要がありswitchますか?

object txtリクエストに応じて、理想的にはページの残りの部分で利用できるようにしたいと思います。したがって、switchステートメントの後にアクセスできるようになりますtxt

私は間違いなくやりたいと思います:

plcHolder.Controls.add(txt);

その部分は問題ありません-それはその前にコントロール固有のプロパティにアクセスしようとしているだけです...それはできないと思います...しかし常にSOの専門家に確認するのが最善です:)

どうもありがとう、マーク

4

2 に答える 2

2

.net 4.0frameworkを使用している場合は、dynamic変数を使用できます

dynamic txt;
    switch (_inputType)
    {
        case code.enums.inputType.textBox:
            txt = new TextBox();
            break;
        case code.enums.inputType.dropDownList:
            txt = new DropDownList();
            break;
        case code.enums.inputType.checkBox:
            txt = new CheckBox();
            break;
    }

この後、そのタイプのコントロールを取得できます。または、次のように直接使用できます。

string boo = txt.Text;

またはチェックボックスとして使用する場合

あなたが使用することができます

bool checked = txt.Checked;

動的変数について読むには、http://msdn.microsoft.com/en-us/library/dd264736.aspxにアクセスしてください。

于 2012-09-20T18:19:46.850 に答える
1

WebControl txt共通のプロパティにアクセスするために、でオブジェクトtxtを変更できます

また、特定のプロパティを調整したい場合は、特定のタイプにキャストします。

    //You declare as global variable of your class        
    public WebControl control{get;set};

    ....
    //Your code inside method
    switch (_inputType)
    {
        case code.enums.inputType.textBox:
            control= new TextBox();
            //Here you can set global property
            control.Id = ""; //etc.
            break;
        case code.enums.inputType.dropDownList:
            control= new DropDownList();
            break;
        case code.enums.inputType.checkBox:
            control = new CheckBox();
            break;
    }


//For Specific property

var test = (TextBox)control;
//Add specific property.
于 2012-09-20T17:15:18.997 に答える