Code generation for property 'Controls' failed. Error was: 'Objectreference not set to an instance

Discussion in 'Microsoft VB .NET' started by Don, Mar 14, 2007.

  1. Don

    Don Guest

    I'm getting the following exception displayed in the task list at design
    time for my project:

    "Code generation for property 'Controls' failed. Error was: 'Object
    reference not set to an instance of an object.'"

    I've traced the problem to a custom control I created that inherits from
    Inherits System.Windows.Forms.TextBox. In this custom control, I have
    two constructors. I'm not sure why I created the second constructor --
    it was so long ago -- but the second constructor is causing the problem.
    This is the problem constructor:

    Public Sub New(ByVal Container As System.ComponentModel.IContainer)
    MyClass.New()

    'Required for Windows.Forms Class Composition Designer support
    Container.Add(Me)

    End Sub

    I've seen this constructor used in many examples of custom controls, but
    I'm not 100% sure what it's for. I suspect it may have something to do
    with the persistence of certain custom properties of the custom control.


    Anyway, the exception only occurs when I have a second custom control --
    a System.Windows.Forms.UserControl -- which has a container control on
    it (e.g. a GroupBox) inside of which exists my inherited custom Textbox
    control. If this second custom control is place within a container
    control on a form and the form is saved, the exception appears in the
    task list at design time.

    This exception is harmless at runtime, but it's bothersome.


    You can reproduce this exception by doing the following:

    1. Create a new, blank VB.NET project.

    2. Create a normal Windows form (e.g. Form1) in the project.

    3. Create a UserControl and replace its text with the following:


    Public Class MyCustomTextbox
    Inherits System.Windows.Forms.TextBox

    #Region " Windows Form Designer generated code "

    Public Sub New(ByVal Container As System.ComponentModel.IContainer)
    MyClass.New()

    'Required for Windows.Forms Class Composition Designer support
    Container.Add(Me)

    End Sub
    Public Sub New()
    MyBase.New()

    'This call is required by the Windows Form Designer.
    InitializeComponent()

    'Add any initialization after the InitializeComponent() call

    End Sub

    'UserControl overrides dispose to clean up the component list.
    Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
    If disposing Then
    If Not (components Is Nothing) Then
    components.Dispose()
    End If
    End If
    MyBase.Dispose(disposing)
    End Sub

    'Required by the Windows Form Designer
    Private components As System.ComponentModel.IContainer

    'NOTE: The following procedure is required by the Windows Form Designer
    'It can be modified using the Windows Form Designer.
    'Do not modify it using the code editor.
    <System.Diagnostics.DebuggerStepThrough()> Private Sub
    InitializeComponent()
    components = New System.ComponentModel.Container
    End Sub

    #End Region

    End Class


    4. Create a second UserControl and replace its text with the following:


    Public Class TestControl
    Inherits System.Windows.Forms.UserControl

    #Region " Windows Form Designer generated code "

    Public Sub New()
    MyBase.New()

    'This call is required by the Windows Form Designer.
    InitializeComponent()

    'Add any initialization after the InitializeComponent() call

    End Sub

    'UserControl overrides dispose to clean up the component list.
    Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
    If disposing Then
    If Not (components Is Nothing) Then
    components.Dispose()
    End If
    End If
    MyBase.Dispose(disposing)
    End Sub

    'Required by the Windows Form Designer
    Private components As System.ComponentModel.IContainer

    'NOTE: The following procedure is required by the Windows Form Designer
    'It can be modified using the Windows Form Designer.
    'Do not modify it using the code editor.
    Friend WithEvents CustomTextbox As TextBoxTest.MyCustomTextbox
    Friend WithEvents GroupBox As System.Windows.Forms.GroupBox
    <System.Diagnostics.DebuggerStepThrough()> Private Sub
    InitializeComponent()
    Me.components = New System.ComponentModel.Container
    Me.CustomTextbox = New TextBoxTest.MyCustomTextbox(Me.components)
    Me.GroupBox = New System.Windows.Forms.GroupBox
    Me.GroupBox.SuspendLayout()
    Me.SuspendLayout()
    '
    'CustomTextbox
    '
    Me.CustomTextbox.Location = New System.Drawing.Point(16, 56)
    Me.CustomTextbox.Name = "CustomTextbox"
    Me.CustomTextbox.TabIndex = 0
    Me.CustomTextbox.Text = ""
    '
    'GroupBox
    '
    Me.GroupBox.Controls.Add(Me.CustomTextbox)
    Me.GroupBox.Location = New System.Drawing.Point(8, 16)
    Me.GroupBox.Name = "GroupBox"
    Me.GroupBox.Size = New System.Drawing.Size(136, 120)
    Me.GroupBox.TabIndex = 1
    Me.GroupBox.TabStop = False
    Me.GroupBox.Text = "GroupBox1"
    '
    'TestControl
    '
    Me.Controls.Add(Me.GroupBox)
    Me.Name = "UserControl2"
    Me.GroupBox.ResumeLayout(False)
    Me.ResumeLayout(False)

    End Sub

    #End Region

    End Class


    5. Save all open files, close all designers, and rebuild the project.

    6. Open the Form1 designer.

    7. Place a container control, such as a GroupBox or Panel control, on
    the form.

    8. Place a TestControl (the second custom control we created) within the
    container control you placed on the form in the previous step.

    9. Save the form designer code. The exception should appear in your
    task list.


    Can anyone shed some light on this problem?

    - Don
     
    Don, Mar 14, 2007
    #1
    1. Advertisements

  2. Don

    Mudhead Guest

    Re: Code generation for property 'Controls' failed. Error was: 'Object reference not set to an instance of an object.'

    Remove all of the Windows Form Designer generated code.

    Public Class MyCustomTextbox
    Inherits System.Windows.Forms.TextBox

    ' Remove all of this:
    #Region "Windows Form Designer generated code"

    #End Region

    ' Your code

    End Class


    "Don" <unknown@oblivion..com> wrote in message
    news:dOTJh.18750$DN.13466@pd7urf2no...
    > I'm getting the following exception displayed in the task list at design
    > time for my project:
    >
    > "Code generation for property 'Controls' failed. Error was: 'Object
    > reference not set to an instance of an object.'"
    >
    > I've traced the problem to a custom control I created that inherits from
    > Inherits System.Windows.Forms.TextBox. In this custom control, I have two
    > constructors. I'm not sure why I created the second constructor --
    > it was so long ago -- but the second constructor is causing the problem.
    > This is the problem constructor:
    >
    > Public Sub New(ByVal Container As System.ComponentModel.IContainer)
    > MyClass.New()
    >
    > 'Required for Windows.Forms Class Composition Designer support
    > Container.Add(Me)
    >
    > End Sub
    >
    > I've seen this constructor used in many examples of custom controls, but
    > I'm not 100% sure what it's for. I suspect it may have something to do
    > with the persistence of certain custom properties of the custom control.
    >
    >
    > Anyway, the exception only occurs when I have a second custom control --
    > a System.Windows.Forms.UserControl -- which has a container control on it
    > (e.g. a GroupBox) inside of which exists my inherited custom Textbox
    > control. If this second custom control is place within a container
    > control on a form and the form is saved, the exception appears in the task
    > list at design time.
    >
    > This exception is harmless at runtime, but it's bothersome.
    >
    >
    > You can reproduce this exception by doing the following:
    >
    > 1. Create a new, blank VB.NET project.
    >
    > 2. Create a normal Windows form (e.g. Form1) in the project.
    >
    > 3. Create a UserControl and replace its text with the following:
    >
    >
    > Public Class MyCustomTextbox
    > Inherits System.Windows.Forms.TextBox
    >
    > #Region " Windows Form Designer generated code "
    >
    > Public Sub New(ByVal Container As System.ComponentModel.IContainer)
    > MyClass.New()
    >
    > 'Required for Windows.Forms Class Composition Designer support
    > Container.Add(Me)
    >
    > End Sub
    > Public Sub New()
    > MyBase.New()
    >
    > 'This call is required by the Windows Form Designer.
    > InitializeComponent()
    >
    > 'Add any initialization after the InitializeComponent() call
    >
    > End Sub
    >
    > 'UserControl overrides dispose to clean up the component list.
    > Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
    > If disposing Then
    > If Not (components Is Nothing) Then
    > components.Dispose()
    > End If
    > End If
    > MyBase.Dispose(disposing)
    > End Sub
    >
    > 'Required by the Windows Form Designer
    > Private components As System.ComponentModel.IContainer
    >
    > 'NOTE: The following procedure is required by the Windows Form
    > Designer
    > 'It can be modified using the Windows Form Designer.
    > 'Do not modify it using the code editor.
    > <System.Diagnostics.DebuggerStepThrough()> Private Sub
    > InitializeComponent()
    > components = New System.ComponentModel.Container
    > End Sub
    >
    > #End Region
    >
    > End Class
    >
    >
    > 4. Create a second UserControl and replace its text with the following:
    >
    >
    > Public Class TestControl
    > Inherits System.Windows.Forms.UserControl
    >
    > #Region " Windows Form Designer generated code "
    >
    > Public Sub New()
    > MyBase.New()
    >
    > 'This call is required by the Windows Form Designer.
    > InitializeComponent()
    >
    > 'Add any initialization after the InitializeComponent() call
    >
    > End Sub
    >
    > 'UserControl overrides dispose to clean up the component list.
    > Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
    > If disposing Then
    > If Not (components Is Nothing) Then
    > components.Dispose()
    > End If
    > End If
    > MyBase.Dispose(disposing)
    > End Sub
    >
    > 'Required by the Windows Form Designer
    > Private components As System.ComponentModel.IContainer
    >
    > 'NOTE: The following procedure is required by the Windows Form
    > Designer
    > 'It can be modified using the Windows Form Designer.
    > 'Do not modify it using the code editor.
    > Friend WithEvents CustomTextbox As TextBoxTest.MyCustomTextbox
    > Friend WithEvents GroupBox As System.Windows.Forms.GroupBox
    > <System.Diagnostics.DebuggerStepThrough()> Private Sub
    > InitializeComponent()
    > Me.components = New System.ComponentModel.Container
    > Me.CustomTextbox = New TextBoxTest.MyCustomTextbox(Me.components)
    > Me.GroupBox = New System.Windows.Forms.GroupBox
    > Me.GroupBox.SuspendLayout()
    > Me.SuspendLayout()
    > '
    > 'CustomTextbox
    > '
    > Me.CustomTextbox.Location = New System.Drawing.Point(16, 56)
    > Me.CustomTextbox.Name = "CustomTextbox"
    > Me.CustomTextbox.TabIndex = 0
    > Me.CustomTextbox.Text = ""
    > '
    > 'GroupBox
    > '
    > Me.GroupBox.Controls.Add(Me.CustomTextbox)
    > Me.GroupBox.Location = New System.Drawing.Point(8, 16)
    > Me.GroupBox.Name = "GroupBox"
    > Me.GroupBox.Size = New System.Drawing.Size(136, 120)
    > Me.GroupBox.TabIndex = 1
    > Me.GroupBox.TabStop = False
    > Me.GroupBox.Text = "GroupBox1"
    > '
    > 'TestControl
    > '
    > Me.Controls.Add(Me.GroupBox)
    > Me.Name = "UserControl2"
    > Me.GroupBox.ResumeLayout(False)
    > Me.ResumeLayout(False)
    >
    > End Sub
    >
    > #End Region
    >
    > End Class
    >
    >
    > 5. Save all open files, close all designers, and rebuild the project.
    >
    > 6. Open the Form1 designer.
    >
    > 7. Place a container control, such as a GroupBox or Panel control, on the
    > form.
    >
    > 8. Place a TestControl (the second custom control we created) within the
    > container control you placed on the form in the previous step.
    >
    > 9. Save the form designer code. The exception should appear in your task
    > list.
    >
    >
    > Can anyone shed some light on this problem?
    >
    > - Don
    >
    >
     
    Mudhead, Mar 14, 2007
    #2
    1. Advertisements

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. VB Programmer
    Replies:
    6
    Views:
    691
    VB Programmer
    Mar 22, 2004
  2. Arian Haeser
    Replies:
    0
    Views:
    278
    Arian Haeser
    Sep 28, 2004
  3. Larry Lard
    Replies:
    2
    Views:
    1,490
    Larry Lard
    Jan 28, 2005
  4. Martin Widmer
    Replies:
    0
    Views:
    532
    Martin Widmer
    Jan 23, 2006
  5. Replies:
    0
    Views:
    227
Loading...

Share This Page