• 反射的应用根据控件名取得控件


    今天在项目中有用到根据控件名称取控件的问题,经过查找相关资料,实现方法如下,此代码为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"));
      //   }
      //  }

  • 相关阅读:
    Python Django框架笔记(三):django工作方式简单说明和创建用户界面
    Python Django框架笔记(二):创建应用和django 管理
    Python笔记(十三):urllib模块
    Python Django框架笔记(一):安装及创建项目
    Python笔记(十二):操作数据库
    Python笔记(十一):多线程
    Python网络爬虫笔记(五):下载、分析京东P20销售数据
    Python笔记(十):正则表达式
    Python网络爬虫笔记(四):使用selenium获取动态加载的内容
    【React Native】Execution failed for task ':app:installDebug'. > com.android.builder.testing.api.DeviceException: No online devices found.
  • 原文地址:https://www.cnblogs.com/waban/p/665326.html
Copyright © 2020-2023  润新知