/// <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];
obj = (object) objType.InvokeMember(MemberName, BindingFlags.Public | BindingFlags.NonPublic |BindingFlags.IgnoreCase | BindingFlags.Instance | BindingFlags.Static| BindingFlags.GetField | BindingFlags.GetProperty , null, obj, null); if (obj!=null) objType=obj.GetType (); else throw new Exception ("不能根据:" + pObjPath + "获得" + pTopObject.ToString() + "的成员:" + MemberName); } return obj;
} catch ( System.Exception ex ){ throw new Exception ("获取 " + pObjPath + " 的成员:" + MemberName + "时发生错误:\n" + ex.Message ); } } 
|