Constructor con base()

04/09/2007 - 14:16 por Frasko | Informe spam
Hola a todos, ojalá me podais ayudar porque estoy agobiado ya de no poder
encontrar la solución. Trabajo con Visual C# 2005 para empezar. Solo pongo el
código interesante, el resto lo omito para no cargar el post.

Tengo creado un UserControl en el que tengo este constructor:
public partial class ucEmpleados : UserControl
{
public ucEmpleados(iGestionEmpleados inter)
{
this.interfGestionEmpleados = inter;
InitializeComponent();
}
}

public interface iGestionEmpleados
{
void VolverAtras();
}

Hasta ahora todo bien. Luego tengo creada una "ApplicationWindows" donde
añado mi UserControl, creándose automáticamente el constructor:

public ucGestionEmpleados()
{
InitializeComponent();
}

La cuestión es que yo lo he modificado por:

public ucGestionEmpleados(iGestionEmpleados inter) : base(inter)
{
InitializeComponent();
}

También he modificado el designer del formulario principal por esto:

this.ucGestionEmpleados1 = new TPV.ucGestionEmpleados(this);

La cuestión es que todo funciona perfectamente, puedo llamar a mi metodo y
funciona bien, pero el formulario principal no muestra el modo diseño ya que
da dos errores:

- Type 'TPV.ucGestionEmpleados' does not have a constructor with parameters
of types Form.
- The variable 'ucGestionEmpleados1' is either undeclared or was never
assigned.

Se que es un poco follón ayudarme por aquí, pero agradecería cualquier ayuda
referente ya que estoy ya que me tiro de los pelos!!

Saludos a todos y mil gracias!

Preguntas similare

Leer las respuestas

#1 Juan Carlos Paramá
04/09/2007 - 14:31 | Informe spam
Hola,

Le estas pasando al constructor la instancia "this", que es un
formulario, y el constructor
de tu control aceptado objetos del tipo iGestionEmpleados no del tipo Form.
Si iGestionEmpleados
es una interfaz el formulario principal debería implementarla, si es una
clase vas a tener que hacer
algunos cambios en el diseño.

Saludos,

Juan Carlos Paramá


"Frasko" escribió en el mensaje de
noticias news:
Hola a todos, ojalá me podais ayudar porque estoy agobiado ya de no poder
encontrar la solución. Trabajo con Visual C# 2005 para empezar. Solo pongo
el
código interesante, el resto lo omito para no cargar el post.

Tengo creado un UserControl en el que tengo este constructor:
public partial class ucEmpleados : UserControl
{
public ucEmpleados(iGestionEmpleados inter)
{
this.interfGestionEmpleados = inter;
InitializeComponent();
}
}

public interface iGestionEmpleados
{
void VolverAtras();
}

Hasta ahora todo bien. Luego tengo creada una "ApplicationWindows" donde
añado mi UserControl, creándose automáticamente el constructor:

public ucGestionEmpleados()
{
InitializeComponent();
}

La cuestión es que yo lo he modificado por:

public ucGestionEmpleados(iGestionEmpleados inter) : base(inter)
{
InitializeComponent();
}

También he modificado el designer del formulario principal por esto:

this.ucGestionEmpleados1 = new TPV.ucGestionEmpleados(this);

La cuestión es que todo funciona perfectamente, puedo llamar a mi metodo y
funciona bien, pero el formulario principal no muestra el modo diseño ya
que
da dos errores:

- Type 'TPV.ucGestionEmpleados' does not have a constructor with
parameters
of types Form.
- The variable 'ucGestionEmpleados1' is either undeclared or was never
assigned.

Se que es un poco follón ayudarme por aquí, pero agradecería cualquier
ayuda
referente ya que estoy ya que me tiro de los pelos!!

Saludos a todos y mil gracias!
Respuesta Responder a este mensaje
#2 Frasko
04/09/2007 - 16:08 | Informe spam
El formulario principal lo declaro así:

public partial class frmPrincipal : Form, iGestionEmpleados

Otras veces lo he hecho así también y me ha funcionado.

Que opinais?

"Juan Carlos Paramá" wrote:

Hola,

Le estas pasando al constructor la instancia "this", que es un
formulario, y el constructor
de tu control aceptado objetos del tipo iGestionEmpleados no del tipo Form.
Si iGestionEmpleados
es una interfaz el formulario principal debería implementarla, si es una
clase vas a tener que hacer
algunos cambios en el diseño.

Saludos,

Juan Carlos Paramá


"Frasko" escribió en el mensaje de
noticias news:
> Hola a todos, ojalá me podais ayudar porque estoy agobiado ya de no poder
> encontrar la solución. Trabajo con Visual C# 2005 para empezar. Solo pongo
> el
> código interesante, el resto lo omito para no cargar el post.
>
> Tengo creado un UserControl en el que tengo este constructor:
> public partial class ucEmpleados : UserControl
> {
> public ucEmpleados(iGestionEmpleados inter)
> {
> this.interfGestionEmpleados = inter;
> InitializeComponent();
> }
> }
>
> public interface iGestionEmpleados
> {
> void VolverAtras();
> }
>
> Hasta ahora todo bien. Luego tengo creada una "ApplicationWindows" donde
> añado mi UserControl, creándose automáticamente el constructor:
>
> public ucGestionEmpleados()
> {
> InitializeComponent();
> }
>
> La cuestión es que yo lo he modificado por:
>
> public ucGestionEmpleados(iGestionEmpleados inter) : base(inter)
> {
> InitializeComponent();
> }
>
> También he modificado el designer del formulario principal por esto:
>
> this.ucGestionEmpleados1 = new TPV.ucGestionEmpleados(this);
>
> La cuestión es que todo funciona perfectamente, puedo llamar a mi metodo y
> funciona bien, pero el formulario principal no muestra el modo diseño ya
> que
> da dos errores:
>
> - Type 'TPV.ucGestionEmpleados' does not have a constructor with
> parameters
> of types Form.
> - The variable 'ucGestionEmpleados1' is either undeclared or was never
> assigned.
>
> Se que es un poco follón ayudarme por aquí, pero agradecería cualquier
> ayuda
> referente ya que estoy ya que me tiro de los pelos!!
>
> Saludos a todos y mil gracias!

Respuesta Responder a este mensaje
#3 Juan Carlos Paramá
05/09/2007 - 13:20 | Informe spam
Hola,

Quizás, es solo una hipótesis que alguien que sepa más sobre el
funcionamiento interno de Visual Studio podría aclarar, el diseñador solo
crea objetos de tipo Form y eso es lo que le pasa al constructor. Teniendo
en cuenta que has modificado el código generado por el diseñador (algo no
recomendado) para pasarle un objeto que no existe hasta el tiempo de
ejecución puede que eso explique porque no te permite esa construcción.

Yo probaría poniendo la línea

this.ucGestionEmpleados1 = new TPV.ucGestionEmpleados(this);

en el constructor del formulario y no en InitializeComponents. De esta
forma el diseñador ya no inicializa la clase y no puede fallar.

Saludos,

Juan Carlos Paramá

"Frasko" escribió en el mensaje de
noticias news:
El formulario principal lo declaro así:

public partial class frmPrincipal : Form, iGestionEmpleados

Otras veces lo he hecho así también y me ha funcionado.

Que opinais?

"Juan Carlos Paramá" wrote:

Hola,

Le estas pasando al constructor la instancia "this", que es un
formulario, y el constructor
de tu control aceptado objetos del tipo iGestionEmpleados no del tipo
Form.
Si iGestionEmpleados
es una interfaz el formulario principal debería implementarla, si es una
clase vas a tener que hacer
algunos cambios en el diseño.

Saludos,

Juan Carlos Paramá


"Frasko" escribió en el mensaje de
noticias news:
> Hola a todos, ojalá me podais ayudar porque estoy agobiado ya de no
> poder
> encontrar la solución. Trabajo con Visual C# 2005 para empezar. Solo
> pongo
> el
> código interesante, el resto lo omito para no cargar el post.
>
> Tengo creado un UserControl en el que tengo este constructor:
> public partial class ucEmpleados : UserControl
> {
> public ucEmpleados(iGestionEmpleados inter)
> {
> this.interfGestionEmpleados = inter;
> InitializeComponent();
> }
> }
>
> public interface iGestionEmpleados
> {
> void VolverAtras();
> }
>
> Hasta ahora todo bien. Luego tengo creada una "ApplicationWindows"
> donde
> añado mi UserControl, creándose automáticamente el constructor:
>
> public ucGestionEmpleados()
> {
> InitializeComponent();
> }
>
> La cuestión es que yo lo he modificado por:
>
> public ucGestionEmpleados(iGestionEmpleados inter) : base(inter)
> {
> InitializeComponent();
> }
>
> También he modificado el designer del formulario principal por esto:
>
> this.ucGestionEmpleados1 = new TPV.ucGestionEmpleados(this);
>
> La cuestión es que todo funciona perfectamente, puedo llamar a mi
> metodo y
> funciona bien, pero el formulario principal no muestra el modo diseño
> ya
> que
> da dos errores:
>
> - Type 'TPV.ucGestionEmpleados' does not have a constructor with
> parameters
> of types Form.
> - The variable 'ucGestionEmpleados1' is either undeclared or was never
> assigned.
>
> Se que es un poco follón ayudarme por aquí, pero agradecería cualquier
> ayuda
> referente ya que estoy ya que me tiro de los pelos!!
>
> Saludos a todos y mil gracias!

Respuesta Responder a este mensaje
#4 Frasko
05/09/2007 - 16:44 | Informe spam
Hola otra vez! No consigo solucionar el problema :(

Os comento lo que quiero hacer realmente, porque igual me estoy complicando...

Yo tengo creados varios UserControl por separado, para luego poder añadirlos
a mi proyecto final. Lo que quiero es que cuando se pulse a un determinado
botón de uno de los UserControl me ejecute una proc implementado en el
formulario principal, o sea, que maneje componentes del formulario principal.

Que se os ocurre??

Mil gracias Juan Carlos!

"Juan Carlos Paramá" wrote:

Hola,

Quizás, es solo una hipótesis que alguien que sepa más sobre el
funcionamiento interno de Visual Studio podría aclarar, el diseñador solo
crea objetos de tipo Form y eso es lo que le pasa al constructor. Teniendo
en cuenta que has modificado el código generado por el diseñador (algo no
recomendado) para pasarle un objeto que no existe hasta el tiempo de
ejecución puede que eso explique porque no te permite esa construcción.

Yo probaría poniendo la línea

this.ucGestionEmpleados1 = new TPV.ucGestionEmpleados(this);

en el constructor del formulario y no en InitializeComponents. De esta
forma el diseñador ya no inicializa la clase y no puede fallar.

Saludos,

Juan Carlos Paramá

"Frasko" escribió en el mensaje de
noticias news:
> El formulario principal lo declaro así:
>
> public partial class frmPrincipal : Form, iGestionEmpleados
>
> Otras veces lo he hecho así también y me ha funcionado.
>
> Que opinais?
>
> "Juan Carlos Paramá" wrote:
>
>> Hola,
>>
>> Le estas pasando al constructor la instancia "this", que es un
>> formulario, y el constructor
>> de tu control aceptado objetos del tipo iGestionEmpleados no del tipo
>> Form.
>> Si iGestionEmpleados
>> es una interfaz el formulario principal debería implementarla, si es una
>> clase vas a tener que hacer
>> algunos cambios en el diseño.
>>
>> Saludos,
>>
>> Juan Carlos Paramá
>>
>>
>> "Frasko" escribió en el mensaje de
>> noticias news:
>> > Hola a todos, ojalá me podais ayudar porque estoy agobiado ya de no
>> > poder
>> > encontrar la solución. Trabajo con Visual C# 2005 para empezar. Solo
>> > pongo
>> > el
>> > código interesante, el resto lo omito para no cargar el post.
>> >
>> > Tengo creado un UserControl en el que tengo este constructor:
>> > public partial class ucEmpleados : UserControl
>> > {
>> > public ucEmpleados(iGestionEmpleados inter)
>> > {
>> > this.interfGestionEmpleados = inter;
>> > InitializeComponent();
>> > }
>> > }
>> >
>> > public interface iGestionEmpleados
>> > {
>> > void VolverAtras();
>> > }
>> >
>> > Hasta ahora todo bien. Luego tengo creada una "ApplicationWindows"
>> > donde
>> > añado mi UserControl, creándose automáticamente el constructor:
>> >
>> > public ucGestionEmpleados()
>> > {
>> > InitializeComponent();
>> > }
>> >
>> > La cuestión es que yo lo he modificado por:
>> >
>> > public ucGestionEmpleados(iGestionEmpleados inter) : base(inter)
>> > {
>> > InitializeComponent();
>> > }
>> >
>> > También he modificado el designer del formulario principal por esto:
>> >
>> > this.ucGestionEmpleados1 = new TPV.ucGestionEmpleados(this);
>> >
>> > La cuestión es que todo funciona perfectamente, puedo llamar a mi
>> > metodo y
>> > funciona bien, pero el formulario principal no muestra el modo diseño
>> > ya
>> > que
>> > da dos errores:
>> >
>> > - Type 'TPV.ucGestionEmpleados' does not have a constructor with
>> > parameters
>> > of types Form.
>> > - The variable 'ucGestionEmpleados1' is either undeclared or was never
>> > assigned.
>> >
>> > Se que es un poco follón ayudarme por aquí, pero agradecería cualquier
>> > ayuda
>> > referente ya que estoy ya que me tiro de los pelos!!
>> >
>> > Saludos a todos y mil gracias!
>>

Respuesta Responder a este mensaje
#5 Frasko
05/09/2007 - 17:34 | Informe spam
Ya he conseguido solucionarlo, no se si de la forma correcta, pero funciona.

Desde mi formulario principal accedo al panel y creo el evento click del
botón que me interesa:

this.ucGestionEmpleados1.btnVolverAtras.Click += new
EventHandler(this.VolverAtras);

"VolverAtras", lógicamente existe en el formulario principal, por lo que
puedo hacer lo que quiera con el formulario.

Juan Carlos, muchas gracias por tu ayuda!! :D

Saludos!!
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida