首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >方法从扩展控件返回扩展类型实例

方法从扩展控件返回扩展类型实例
EN

Stack Overflow用户
提问于 2017-07-11 02:26:23
回答 1查看 36关注 0票数 1

在我的解决方案中,我有一个自定义组件,它实现了IExtenderProvider,以便为其他控件提供属性。我想为该组件实现一个方法,该方法以控件为参数,返回与之关联的扩展程序组件的实例,如下所示:

代码语言:javascript
复制
    Public Function GetErrorProvider(c As Control) As MyErrorProvider
        Dim errorProvider as MyErrorProvider
        'Some code here
        Return errorProvider 
    End Function

我想简单地查看表单并循环查找MyErrorProvider类型的控件并使用它,因为每个表单不会有超过一个这样的组件,但我想要一种更直接的方法。我希望在表单范围之外的一些依赖于运行时为该实例定义的值的逻辑中使用此方法。

有什么想法/建议吗?谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-11 20:42:41

出于完整性的目的,我添加了从上面链接的C#代码转换并略微调整的解决方案。这似乎只能通过反射来实现(如果我错了,请纠正我!):

代码语言:javascript
复制
Public Shared Function GetErrorProvider(control As Control) As MyErrorProvider
    'get the containing form of the control
    Dim form = control.GetContainerControl()

    'use reflection to get to "components" field
    Dim componentField = form.[GetType]().GetField("components", BindingFlags.NonPublic Or BindingFlags.Instance)

    If componentField IsNot Nothing Then
        'get the component collection from field
        Dim components = componentField.GetValue(form)

        'locate the ErrorProvider within the collection
        Return TryCast(components, IContainer).Components.OfType(Of MyErrorProvider)().FirstOrDefault()
    Else
        Return Nothing
    End If
End Function
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45019254

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档