zoukankan      html  css  js  c++  java
  • 根据控件名称反射查找控件

    因为对.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;
        }

  • 相关阅读:
    MPLab X 配置字的设置
    System.Windows.Forms.Timer定时器的“自毁”
    单片机部分缩写对照
    我的艰辛之路——2012年个人总结之三
    浏览器IE6不支持的CSS样式的选择符[转]
    SVN 用户权限管理[转]
    VC++ 随机数生成方案选择[转]
    GB/T 77142005参考文献规范[转]
    正则表达式备忘[转]
    文档、视图、框架窗口、文档模板之间的相互关系【转】
  • 原文地址:https://www.cnblogs.com/gc2013/p/3878028.html
Copyright © 2011-2022 走看看