【问题标题】:Why is Me.components Nothing?为什么 Me.components 什么都没有?
【发布时间】:2009-02-05 16:53:09
【问题描述】:

我编写了一个自定义 ErrorProvider,它为现有的 ErrorProvider 添加了一些功能(设置控件 BackColor、ErrorCount 等)。这是有效的发现,但现在由于某种原因它落在了构造函数上:

_LoginErrorProvider = New ErrorLogErrorProvider(Me.components)

错误是一个 NullReferenceException,它是由 Me.components 是 Nothing 的事实引起的。谁能解释为什么表单的组件集合什么都不是?该表单似乎在其他所有方面都可以正常工作!

【问题讨论】:

    标签: vb.net winforms custom-controls


    【解决方案1】:

    您还可以将 ErrorLogErrorProvider 类放到 Form / UserControl 的设计图面上,为 InitializeComponent 生成的代码将正确初始化组件成员并将其传递给错误提供程序的构造函数(VS 对所有非可视成分)。只需确保您的 ErrorLogErrorProvider 类派生自 Component 或实现 IComponent 接口即可。

    【讨论】:

    • 好提示,我不知道。
    【解决方案2】:

    当您将组件添加到设计图面时,它会将其添加到 InitializeComponent 函数中

    me.components = new System.ComponentModel.Container()
    

    所以只需在你自己中添加这个。

    或者你的

    _LoginErrorProvider = New ErrorLogErrorProvider(Me.components)
    

    在 InitializeComponent 之前被调用

    【讨论】:

    • 我明白了,这是我缺少的 Me.components 初始化!
    【解决方案3】:

    解决了,在表单中添加另一个组件似乎可以解决问题,它有点杂乱但有效。我想理想的解决方案是将我的 ErrorProvider 添加到 me.components 但为了做到这一点,你需要初始化一个你不能初始化的新实例,因为 Me.components 什么都没有!!

    它可以让一个人发疯.....

    【讨论】:

      【解决方案4】:

      解决了!

      使用下面的代码来解决它!

      Public Sub New()
      
          ' This call is required by the designer.
          InitializeComponent()
      
          ' Add any initialization after the InitializeComponent() call.
      
      End Sub
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-06-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多