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

  • 相关阅读:
    Filter的基本配置
    11.3、4(filter的生命周期和API)、
    11.1(过滤器概述)、(创建过滤器filter)
    10.6商品的促销活动,(未解决)
    php 调用常量或者变量的时候千万不能加引号""'' 不然不生效
    thinkphp5 if else的表达式怎么写?
    request() 获取参数是数组不是对象
    thinkphp5 PATHINFO路由正确的访问方式
    thinkphp5 的iframe文件怎么显示到html里面
    thinkphp5引入外部css js文件
  • 原文地址:https://www.cnblogs.com/gc2013/p/3878028.html
Copyright © 2011-2022 走看看