2

我不确定这在 C# 中是否可行:

我有一个userControl我有一个属性inputType- 枚举有 3 个可能的选项,textBox、dropDownList 或 checkBox。

然后我想创建一个该类型的新对象并将其添加到 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

您可以修改对象 txtWebControl 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 回答