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;
        }

  • 相关阅读:
    5个JavaScript的字符串处理库
    一款在线还款记账产品诞生实战
    企业级B端产品:如何建立一致性设计规范和度量标准?
    15个产品与交互必懂的技术用语!
    利润的来源:会员权益的前置和后置
    为什么设计工作总是感觉很被动?
    中国服装业首次负增长背后,是设计垄断权引领需求的逻辑失效
    怎么样写出卖货文案?试试加一点“想象力”
    SublimeText 3200 package Control 安装
    FlappyBirdWeb素材资源
  • 原文地址:https://www.cnblogs.com/gc2013/p/3878028.html
Copyright © 2011-2022 走看看