根据给定的对象和路径,获得其子孙成员

///如未特别说明,本人所发表的技术文章都为原创, 任何人引用都请注明出处,并包含本声明
///作者: CSDN网名alias88,邮件:alias88@163.com,QQ:63343
 ///用法如:
///1 object obj=  GetMember(frmMain,"txtName",null);
/// (obj as Control).Text="Hello!"    //相当于frmMain.txtName.Text="Hello!"
///2 object obj=  GetMember(frmMain,"txtName.Text",null)  ;
/// string text=obj.ToString(); //相当于text=frmMain.txtName.Text


  /// <summary>
 /// 根据给定的对象和路径,获得其子孙成员
 /// </summary>
 /// <param name="pTopObject">要获得的成员是此对象的子孙,一般为Form</param>
 /// <param name="pObjPath">依此路径获取,例如: TextBox1 或TextBox1.Size</param>
 /// <param name="Index">用索引化属性的可选索引值返回</param>
 /// <returns>子孙</returns>
public static object GetMember(object pTopObject, string pObjPath,object[] Index)
    {
  
  
      string[] strMember;
  
  
      string MemberName="";
  
  
      object obj=null;
  
  
      Type objType=null;
  
  
 
  
  
      try 
  
  
      {
  
  
        strMember=pObjPath.Split ('.');
  
  
        for (int i=0; i<strMember.Length && strMember[i]!="" ;i++)
  
  
        {
  
  
          if (i==0) 
  
  
          {
  
  
            obj=(object)pTopObject;
  
  
            objType=pTopObject.GetType ();
  
  
          }
  
  
          MemberName=strMember[i];
  
  
 
  
  
          if (objType!=null)
  
  
          {
  
  
             obj = (object) objType.InvokeMember(MemberName, 
  
  
              BindingFlags.Public | BindingFlags.NonPublic |BindingFlags.IgnoreCase | 
  
  
BindingFlags.Instance | BindingFlags.Static| BindingFlags.GetField |
  
  
BindingFlags.GetProperty , null, obj,Index);
  
  
            if (obj!=null)    objType=obj.GetType ();
  
  
          }
  
  
          else
   
   
          {
  
  
            obj=null;
  
  
            break;
  
  
          }
  
  
        }
  
  
        return obj;
  
  
      }
  
  
      catch ( System.Exception ex  )
  
  
      {
  
  
        string errmsg=string.Format ("获取{0}的成员:{1}时发生错误:/n{2}",
  
  
pObjPath,MemberName, ex.Message );  
  
  
        System.Console.WriteLine(errmsg);
  
  
        return null;
  
  
      }
  
  
    }
  
  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值