problemas de herencia entre formularios

20/07/2006 - 13:34 por [Juanjo] | Informe spam
Hola Grupo:

Tengo un pequeño problema con la herencia entre formularios (debido a mi
ignorancia en gran parte)

Tengo un formulario (padre) del cual heredan varios formularios
(hijos).Si añado un boton (u otro
componente, como un ToolStrip) en el padre, aparece en los hijos. Normal no?
Pero porque este
boton aparece "bloqueado"? no lo puedo mover? y en el caso del ToolStrip,
porque no puedo
añadirle mas botones?.

Si alguien me puede ayudar o decirme alguna web, se agradece.

Un saludo.

Preguntas similare

Leer las respuestas

#6 [Juanjo]
21/07/2006 - 21:17 | Informe spam
Gracias Octavio,

Creo que eso sera lo que hare, porque no hay forma de hacer publico el
componente (ni con public,protected, nada)

Gracias
"Octavio Hernandez" escribió en el mensaje
news:
JJ,

En cualquier caso siempre puedes hacerlo en tiempo de ejecución:

ToolStrip1.Items.Add( ... );

Yo estas cosas prefiero hacerlas en ejecución para que me quede claro que
estoy manipulando compoentes heredados.

Slds - Octavio



"[Juanjo]" escribió en el mensaje
news:
Gracias por la respuesta.

En el caso del boton, si lo pongo como public funciona correctamente,
pero para el caso del StripTool es imposible añadir
ningun boton mas? sabes por que?

De todas las formas muchas gracias.


"Alberto Poblacion"
escribió en el mensaje news:
"[Juanjo]" wrote in message
news:uOlDFC$
Tengo un formulario (padre) del cual heredan varios formularios
(hijos).Si añado un boton (u otro
componente, como un ToolStrip) en el padre, aparece en los hijos.
Normal no? Pero porque este
boton aparece "bloqueado"? no lo puedo mover? y en el caso del
ToolStrip, porque no puedo añadirle mas botones?.



Eso es porque en el padre los controles están declarados como
"private", por lo que los hijos no los pueden modificar. Selecciona el
control en el formulario padre y busca la propiedad "Modifier", y
cámbiale el valor a "public". De esta manera podrás modificarlo en los
formularios hijos.










Respuesta Responder a este mensaje
#7 Octavio Hernandez
23/07/2006 - 10:20 | Informe spam
JJ,

Fíjate que el tema de modificar las props del componente en tiempo de diseño
"tiene su miga"; el código correspondiente
habría que ponerlo en el InitializeComponent() del form heredado,
distinguiendo siempre lo que se ha hecho "aquí" de
lo que se hizo "en el padre" (o el abuelo, el bisabuelo...).

Habrá que proponer que mejoren eso para próximas versiones de VS :-)

Saludos - Octavio



"[Juanjo]" escribió en el mensaje
news:
Gracias Octavio,

Creo que eso sera lo que hare, porque no hay forma de hacer publico el
componente (ni con public,protected, nada)

Gracias
"Octavio Hernandez" escribió en el mensaje
news:
JJ,

En cualquier caso siempre puedes hacerlo en tiempo de ejecución:

ToolStrip1.Items.Add( ... );

Yo estas cosas prefiero hacerlas en ejecución para que me quede claro que
estoy manipulando compoentes heredados.

Slds - Octavio



"[Juanjo]" escribió en el mensaje
news:
Gracias por la respuesta.

En el caso del boton, si lo pongo como public funciona correctamente,
pero para el caso del StripTool es imposible añadir
ningun boton mas? sabes por que?

De todas las formas muchas gracias.


"Alberto Poblacion"
escribió en el mensaje news:
"[Juanjo]" wrote in message
news:uOlDFC$
Tengo un formulario (padre) del cual heredan varios formularios
(hijos).Si añado un boton (u otro
componente, como un ToolStrip) en el padre, aparece en los hijos.
Normal no? Pero porque este
boton aparece "bloqueado"? no lo puedo mover? y en el caso del
ToolStrip, porque no puedo añadirle mas botones?.



Eso es porque en el padre los controles están declarados como
"private", por lo que los hijos no los pueden modificar. Selecciona el
control en el formulario padre y busca la propiedad "Modifier", y
cámbiale el valor a "public". De esta manera podrás modificarlo en los
formularios hijos.














Respuesta Responder a este mensaje
#8 susanamalo
23/07/2006 - 13:04 | Informe spam
Y ahora que ha salido el tema, yo al principio no ponía como protected
estos componentes, los dejaba en private y hacía referencia a ellos
con la colección Controls:

this.Controls["NombredeComponente"]

haciendo el casting correspondiente.

Otro tema que no se si os pasa a vosotros con VS2005. Al heredar de
formularios o utilizar componentes de usuario, muchas veces el
diseñador casca y hay que recompilar o regenerar la solución (a mi me
pasa en la actual,la cual tiene tres proyectos, cada uno de ellos
correspondiente a una capa de diseño).

Otro problema: En un formulario base el cual relleno una serie de
combos con el contenido de unos datatables, no se por que extraña
razón, en el formulario heredado me pone en el archivo de recursos los
combos de nuevo y me da problemas a la hora de mostrarlo en el
diseñador y a la hora de compilar. Tengo que borrar a pelo los
elementos del archivo xml de recursos correspondientes a esos combos, y
eso debo hacerlo cada vez que modifico algo del diseño del form o que
programo un nuevo manejador de evento desde el diseño (p.e. el clic de
un botón). Os pasa a vosotros o puede ser algún error de instalación
o de versión de VS2005?




Octavio Hernandez wrote:
JJ,

Fíjate que el tema de modificar las props del componente en tiempo de diseño
"tiene su miga"; el código correspondiente
habría que ponerlo en el InitializeComponent() del form heredado,
distinguiendo siempre lo que se ha hecho "aquí" de
lo que se hizo "en el padre" (o el abuelo, el bisabuelo...).

Habrá que proponer que mejoren eso para próximas versiones de VS :-)

Saludos - Octavio



"[Juanjo]" escribió en el mensaje
news:
> Gracias Octavio,
>
> Creo que eso sera lo que hare, porque no hay forma de hacer publico el
> componente (ni con public,protected, nada)
>
> Gracias
> "Octavio Hernandez" escribió en el mensaje
> news:
>> JJ,
>>
>> En cualquier caso siempre puedes hacerlo en tiempo de ejecución:
>>
>> ToolStrip1.Items.Add( ... );
>>
>> Yo estas cosas prefiero hacerlas en ejecución para que me quede claro que
>> estoy manipulando compoentes heredados.
>>
>> Slds - Octavio
>>
>>
>>
>> "[Juanjo]" escribió en el mensaje
>> news:
>>> Gracias por la respuesta.
>>>
>>> En el caso del boton, si lo pongo como public funciona correctamente,
>>> pero para el caso del StripTool es imposible añadir
>>> ningun boton mas? sabes por que?
>>>
>>> De todas las formas muchas gracias.
>>>
>>>
>>> "Alberto Poblacion"
>>> escribió en el mensaje news:
>>>> "[Juanjo]" wrote in message
>>>> news:uOlDFC$
>>>>> Tengo un formulario (padre) del cual heredan varios formularios
>>>>> (hijos).Si añado un boton (u otro
>>>>> componente, como un ToolStrip) en el padre, aparece en los hijos.
>>>>> Normal no? Pero porque este
>>>>> boton aparece "bloqueado"? no lo puedo mover? y en el caso del
>>>>> ToolStrip, porque no puedo añadirle mas botones?.
>>>>
>>>> Eso es porque en el padre los controles están declarados como
>>>> "private", por lo que los hijos no los pueden modificar. Selecciona el
>>>> control en el formulario padre y busca la propiedad "Modifier", y
>>>> cámbiale el valor a "public". De esta manera podrás modificarlo en los
>>>> formularios hijos.
>>>>
>>>>
>>>
>>>
>>
>>
>
>
Respuesta Responder a este mensaje
#9 Octavio Hernandez
23/07/2006 - 15:19 | Informe spam
Susana,

- Hacer esto

this.Controls["NombredeComponente"]

al final es más o menos lo mismo que referirte al componente por su nombre
(siempre que no sea private)
solo que un poco menos eficiente dada la búsqueda en la colección de
controles.

- El problema de "casque" que comentas no me ha ocurrido, pero sí lo han
comentado varios en este foro...

Salu2 - Octavio
Respuesta Responder a este mensaje
#10 Juan Diego Bueno
23/07/2006 - 16:19 | Informe spam
Bueno, reseñar que la tal susana era yo, que tenía el login de mi
novia sin darme cuenta. Octavio, ya se que es lo mismo, simplemente
indicaba lo que hacía antes de darme cuenta de que lo podía hacer de
la otra forma. De esta forma también daba una idea de como poder hacer
referencia de otra forma a un control heredado. Evidentemente, ya no la
uso :)

Al ver que le pasa a otras personas de este grupo, al menos tiendo a
pensar que no es un problema aislado. Tengo pensado impartir un curso a
finales de Septiembre, y si finalmente se hace sobre .NET 2.0 (no se si
VB o C#), comprobaré con el resto de alumnos si pasa a menudo

Gracias

Octavio Hernandez wrote:
Susana,

- Hacer esto

this.Controls["NombredeComponente"]

al final es más o menos lo mismo que referirte al componente por su nombre
(siempre que no sea private)
solo que un poco menos eficiente dada la búsqueda en la colección de
controles.

- El problema de "casque" que comentas no me ha ocurrido, pero sí lo han
comentado varios en este foro...

Salu2 - Octavio
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida