如下代码可以提供遍历Controls的功能,这几句代码的意义我都注释好了。string mytext;
foreach(Control co in this.Controls) //1。遍历控件
{
  mytext=co.GetType().ToString(); //2。得到当前控件的类型
  if(mytext=="System.Windows.Forms.TextBox") //3。如果当前控件的类型是TextBox
  ((TextBox)co).Text=""; } //4 。把当前控件co强制转换成TextBox类型。并把Text属性赋值为空。但是我需要的功能是1,遍历控件 2得到当前控件的类型,3把当前控件强制转换成第二步得到的类型。(如上代码中是直接强制转换成TextBox类型了。代码写死了的。我需要的是把当前控件转换成第二步得到的类型。 得到什么类型就转换成什么类型,不一定非是TextBox类型) 。

解决方案 »

  1.   

    void foo(Type ControlType)
    {
        foreach (var c in Controls)
        {
            if (c.GetType() == ControlType)
            { 
                ...
            }
        }
    }
    使用:
    foo(label1.GetType());
    或者
    foo(typeof(Label));
      

  2.   


    foreach(Control co in this.Controls)
    {
        if(co is TextBox)
        {
            ((TextBox)co).Text = "";
        }
    }
      

  3.   

    这样只能一个类型一个类型的判断,不符合我的需要,我需要的是把c对象的类型直接转换成c.GetType()得到的类型。
      

  4.   

    如果你使用 C# 4.0,不需要转化,直接使用动态类:foreach (dynamic c in this.Controls)
    {
        //假设你控件的名字符合约定的前缀
        if (c.Name.SubString(1, 3) == "txt") c.Text = "123";
        if (c.Name.SubString(1, 3) == "lst") c.Items.Add("123");
    }
      

  5.   

    楼主你的逻辑有点不太现实啊
    你就判断一次就搞定的话你定义个什么变量来接受转换的结果呢?
    用object接受?那岂不是白转换了
    而且就算你的得到了那个你想要的结果,你接下来的代码怎么写?
    不同的控件要执行不同的操作啊所以还老实点吧
                if (co is Button)
                    (sender as Button).Text = "test";
                else if (co is TextBox)
                    (sender as TextBox).Text = "test";
                else
                    ...
      

  6.   

    判断个类型还行,
    给 Text 赋值用得着转换类型吗?
    真是的