博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
根据控件名称反射查找控件
阅读量:5022 次
发布时间:2019-06-12

本文共 1665 字,大约阅读时间需要 5 分钟。

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

 

转载于:https://www.cnblogs.com/gc2013/p/3878028.html

你可能感兴趣的文章
杜教筛
查看>>
《Ext JS模板与组件基本知识框架图----模板》
查看>>
txmpp
查看>>
微信开发时调用jssdk,在安卓设备中成功调用;在ios设备中返回错误消息:config fail,无其他具体错误消息,且接口权限显示获取ok,无法调用...
查看>>
【Github教程】史上最全github使用方法:github入门到精通
查看>>
抽象工厂模式(Abstract Factory)
查看>>
luogu1373 小a和uim之大逃离 (dp)
查看>>
Redis的Pub/Sub客户端实现
查看>>
SQL日常问题和技巧——持续更新
查看>>
springMVC入门(一)------springMVC基本概念与安装
查看>>
Sam做题记录
查看>>
[bzoj] 2453 维护数列 || 单点修改分块
查看>>
IIS版本变迁
查看>>
BZOJ3884: 上帝与集合的正确用法 拓展欧拉定理
查看>>
mybatis09--自连接一对多查询
查看>>
myeclipse10添加jQuery自动提示的方法
查看>>
【eclipse jar包】在编写java代码时,为方便编程,常常会引用别人已经实现的方法,通常会封装成jar包,我们在编写时,只需引入到Eclipse中即可。...
查看>>
视频监控 封装[PlayCtrl.dll]的API
查看>>
软件工程APP进度更新
查看>>
Python 使用正则替换 re.sub
查看>>