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

  • 相关阅读:
    echarts实现地图
    微信开发之自定义菜单 + php
    微信开发之消息模板推送 + php
    微信开发之JS-SDK + php 实现分享朋友/朋友圈,QQ/QQ空间
    微信开发之网页授权 PHP
    微信开发之生成二维码,扫码关注公众号PHP
    微信开发之JS-SDK + PHP实现录音、上传、语音识别
    微信公众号开发启用服务器配置提交token验证失败 php
    带上数据表,分析一下拼团活动该如何设计
    ajax实现异步加载ECharts图表数据
  • 原文地址:https://www.cnblogs.com/gc2013/p/3878028.html
Copyright © 2011-2022 走看看