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"));
      //   }
      //  }

  • 相关阅读:
    电容降压的工作原理与计算
    B站开源ijkplayer 等多个项目
    Kindle支持哪些格式
    PPM格式解析
    YUV RGB播放器 打开, 显示RGB数据
    How to print 如何输出 int64_t,uint64_t的值 in C
    FileSeek文件内容搜索工具下载
    对android录制的NV21视频数据进行旋转(90,180,270)与剪切
    Adobe Flash Media Server安装
    Linux使用du和df查看磁盘和文件夹占用空间
  • 原文地址:https://www.cnblogs.com/waban/p/665326.html
Copyright © 2011-2022 走看看