///如未特别说明,本人所发表的技术文章都为原创, 任何人引用都请注明出处,并包含本声明
///作者: 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;
}
}