因为对.net了解不是太深入,所以只能做出这样的水平:

找到要查找的反射属性信息:
    PropertyInfo ^  getPropertyInfo(Type ^  t, String ^  pName) {
        PropertyInfo
^  pInfo;
        
while  (t  !=  nullptr) {
            pInfo 
=  t -> GetProperty(pName, BindingFlags::DeclaredOnly  |  BindingFlags::Public  |  BindingFlags::Instance);
            
if  (pInfo  !=  nullptr)
            {
                
return  pInfo;
            }
            t 
=  t -> BaseType;
        }
        
return  nullptr;
    }

从一个Component开始查找,然后查找其子Component是否有名为compName的控件,有则返回,无则返回nullptr
     //  get a component by it's name, the component is in comp
    Component ^  getComponentByName(String ^  compName, Component ^  comp) {
        
if  (nullptr  ==  comp)
        {
            
return  comp;
        }

        
//  if this component is the right one, then return it
        Type ^  t  =  comp -> GetType();
        PropertyInfo
^  pInfo  =  t -> GetProperty( " Name " );
        
if  (pInfo  !=  nullptr  &&  compName -> Equals(dynamic_cast < String ^> (pInfo -> GetValue(comp, nullptr))))
        {
            
return  comp;
        }

        
//  search this component's children Controls
        Component ^  retComp;
        pInfo 
=  getPropertyInfo(t,  " Controls " );
        
if  (pInfo  !=  nullptr)
        {
            System::Collections::IList
^  list  =  safe_cast < System::Collections::IList ^> (pInfo -> GetValue(comp, nullptr));
            
if  (list  !=  nullptr)
            {
                
for  ( int  i  =   0 ; i  <  list -> Count; i ++ )
                {
                    
if  (nullptr  !=  (retComp  =  getComponentByName(compName, safe_cast < Component ^> (list[i]))))
                    {
                        
return  retComp;
                    }
                }
            }
        }

        
//  search this component's children Items
        pInfo  =  getPropertyInfo(t,  " Items " );
        
if  (pInfo  !=  nullptr)
        {
            System::Collections::IList
^  list  =  safe_cast < System::Collections::IList ^> (pInfo -> GetValue(comp, nullptr));
            
if  (list  !=  nullptr)
            {
                
for  ( int  i  =   0 ; i  <  list -> Count; i ++ )
                {
                    
if  (nullptr  !=  (retComp  =  getComponentByName(compName, safe_cast < Component ^> (list[i]))))
                    {
                        
return  retComp;
                    }
                }
            }
        }

        
return  nullptr;
    }