从字符串c#获取Control类型

时间:2013-03-10 08:40:40

标签: c# types

我有一个像这样的字符串:

typeStr = label1.GetType().ToString();

现在我想通过type反向获取此控件的typeStr

我尝试了Type.GetType(typeStr)之类的功能,但没有帮助。

有没有简单的方法来获取type

3 个答案:

答案 0 :(得分:1)

您可以传递Type全名

Type type = Type.GetType("System.Windows.Forms.Label");

这将创建类型并创建对象的实例,您可以使用Activator.CreateInstance

object obj = Activator.CreateInstance(type);



使用Type

中加载的AppDomain.CurrentDomain.GetAssemblies()
   private void btnAddDymanicLabel_Click(object sender, EventArgs e)
    {
        Type type = GetTypeNameFromDomain("System.Windows.Forms.Label");
        Label lbl = (Label) Activator.CreateInstance(type);
        this.Controls.Add(lbl);
        lbl.Text = "dynamic created control";


    }

    private Type GetTypeNameFromDomain(string typename)
    {
        return AppDomain.CurrentDomain.GetAssemblies().SelectMany(assembly => assembly.GetTypes().Where(type => type.FullName == typename)).FirstOrDefault();
    }

一个简单的例子:

static void Main(string[] args)
{
    Type type = Type.GetType("System.Int32");
    object obj = Activator.CreateInstance(type);
    int num = (int) obj;
    num = 10;
    Console.WriteLine(num); // prints : 10
}

答案 1 :(得分:0)

尝试使用

获取名称
typeStr = label1.GetType().GetFullName();

然后

type = Type.GetType(typeStr);

答案 2 :(得分:0)

你的意思是你只想从这样的字符串中获取该类型的实例

classname instance = Activator.CreateInstance("<assemblyname>","<classname>") as classname;