El valor no puede ser nulo. Nombre del parámetro: objectType

El error en cuestión me salía en el diseñador de Visual Basic Express 2010 de forma insistente. Una molestia a la hora de trabajar con el diseñador, más que nada, porque luego la aplicación funcionaba sin problemas. Ayer me dediqué a buscarle solución, tirando de Google.

El problema, apuntaban en varios sitios, se daba en formularios o controles de usuario heredados y estaba causado al gestionar eventos de objetos de alguna de las clases padre con la cláusula Handles en la clase hija. Tras investigar con calma mi usercontrol, encontré que el causante del desaguisado era, efectivamente, una cláusula handles que apuntaba a un evento de un BindingSource del abuelo del usercontrol. Quité el Handles y lo sustituí por un AddHandler en el constructor y todo funciona con suavidad.

4 pensamientos en “El valor no puede ser nulo. Nombre del parámetro: objectType

  1. ron calderon

    Hola tengo el mismo problema como puedo hacer donde debo colocar el AddHandler ??? gracias por la atencion

  2. Cubano Autor

    Buenas. El mejor sitio, como digo, es en el constructor (Sub New, si usas Visual Basic) de tu formulario/usercontrol hijo.

  3. ron calderon

    Podrias darme un ejemplo, tengo un control de usuario de un button, y quiero usar el onclic en los objetos que hereden ese control.gracias

  4. Cubano Autor

    Disculpa la tardanza, entre Navidad y la gripe no me he acercado mucho al ordenador estos días.

    No sé si tu caso es similar al mío, así que voy a intentar explicarte cuál fue mi situación y cómo lo solucioné:

    Tengo una plantilla de usercontrol llamada PantallaBaseUserControl que contiene toda la funcionalidad común de la aplicación. Eso incluye controles y componentes como botones, tabpages y bindingsource. Están declarados como Protected para poder acceder desde las clases (“pantallas”) hijas.

    En algunas de las pantallas hijas he necesitado controlar eventos del bindingsource (bsDatos). Si lo hacía de la forma Private Sub bsDatos_Evento() Handles bsDatos.Evento se producía el error de ObjectType del diseñador. Esto lo solucioné usando AddHandler en lugar del Handles. Es decir, en el Sub New añadí AddHandler bsDatos.Evento, AddressOf bsDatos_Evento. Con eso se solucionó el problema.

    Con unos botones tuve otra situación: tienen un comportamiento base definido, pero puede que la clase base necesite modificar este comportamiento. En este caso, hice la captura en PantallaBaseUserControl de la forma normal:

    Protected Overridable Sub btnNuevo_Click() Handles btnNuevo.Click

    pero declarando el sub como overridable. En la clase hija sobreescribía el método:

    Protected Overrides Sub btnNuevo_Click

    y listo.

    No sé si tu caso es alguno de estos.

Deja un comentario