zoukankan      html  css  js  c++  java
  • 反射的应用根据控件名取得控件

    今天在项目中有用到根据控件名称取控件的问题,经过查找相关资料,实现方法如下,此代码为c#,转换为vb.net可以同样使用。

    //必须引用命名空间System.Reflection,System.ComponentModel

      /// <summary>
      /// 根据控件名和属性名取值
      /// </summary>
      /// <param name="ClassInstance">控件所在实例</param>
      /// <param name="ControlName">控件名</param>
      /// <param name="PropertyName">属性名</param>
      /// <returns>属性值</returns>
      public static Object GetValueControlProperty(Object ClassInstance, string ControlName, string PropertyName)
      {
       Object Result=null;

       Type myType = ClassInstance.GetType();

       FieldInfo myFieldInfo  = myType.GetField(ControlName, BindingFlags.NonPublic | //"|"为或运算,除非两个位均为0,运算结果为0,其他运算结果均为1
        BindingFlags.Instance );

       if(myFieldInfo !=null)
       {
        PropertyDescriptorCollection properties   = TypeDescriptor.GetProperties(myFieldInfo.FieldType);

        PropertyDescriptor myProperty = properties.Find(PropertyName, false);

        if(myProperty!=null)
        {
         Object ctr;

         ctr = myFieldInfo.GetValue(ClassInstance);

         try
         {
          Result = myProperty.GetValue(ctr);
         }
         catch(Exception ex)
         {
          MessageBox.Show(ex.Message);
         }
        }
       }

       return Result;
      }       
         
      /// <summary>
      /// 根据控件名和属性名赋值
      /// </summary>
      /// <param name="ClassInstance">控件所在实例</param>
      /// <param name="ControlName">控件名</param>
      /// <param name="PropertyName">属性名</param>
      /// <param name="Value">属性值</param>
      /// <returns>属性值</returns>
      public static Object SetValueControlProperty(Object ClassInstance , string ControlName, string PropertyName, Object Value)
      {
       Object Result=null;

       Type myType = ClassInstance.GetType();

       FieldInfo myFieldInfo  = myType.GetField(ControlName, BindingFlags.NonPublic
        | BindingFlags.Instance );  
       if(myFieldInfo!=null)
       {
        PropertyDescriptorCollection properties   = TypeDescriptor.GetProperties(myFieldInfo.FieldType);

        PropertyDescriptor myProperty   = properties.Find(PropertyName, false);  //这里设为True就不用区分大小写了

        if(myProperty!=null)
        {
         Object ctr;

         ctr = myFieldInfo.GetValue(ClassInstance); //取得控件实例

         try
         {
          myProperty.SetValue(ctr, Value);

          Result = ctr;
         }
         catch( Exception ex)
         {
          MessageBox.Show(ex.Message);
         }
        }
       }
       return Result;
      }

      //调用

      //以下实现Label1.Text=TextBox1.Text,Label2.Text=TextBox2

      //  private void Button1_Click(System.Object sender , System.EventArgs e)
      //  {
      //   int i;
      //
      //   for( i = 1;i<= 2;i++)
      //   {
      //    this.SetValueControlProperty(this, "Label" + i.ToString(), "Text", GetValueControlProperty(this, "TextBox" + i.ToString(), "Text"));
      //   }
      //  }

  • 相关阅读:
    读后感
    每日总结
    融e学 一个专注于重构知识,培养复合型人才的平台【获取考试答案_破解】
    营销经验总结:如何才能提升h5游戏代入感?
    在通过《令人心动的offer》中,掌握学到的公司选择企业邮箱3大技巧!
    2020年的最后一个月来了!TOM 企业邮箱陪伴您度过!
    用户主动分享h5游戏的4大理由
    企业邮箱的作用是什么?企业邮箱有什么用处?
    电子邮箱系统哪家好?邮箱登陆入口是?
    专业外贸企业邮箱,企业邮箱退信怎么办?
  • 原文地址:https://www.cnblogs.com/waban/p/665326.html
Copyright © 2011-2022 走看看