Dos sobre userControls

20/06/2004 - 18:16 por Leonardo Azpurua | Informe spam
Hola.

Una: en un usercontrol tengo un PictureBox, cuyo contenido es controlado
desde dentro del control mismo. Cuando inserto el control de usuario en una
forma, el contenido del pictureBox no se muestra. Algo me falta, pero ni
idea de que es.

Ese mismo control tiene un Label. Se implementa (Shadows) una propiedad
Text, que asigna o lee el texto del label. Cuando cierro la forma
contenedora y la vuelvo a abrir el valor es el valor inicial del Label. Esto
esta claro: me falta hacer algo como el WriteProperties/ReadProperties de
VB6, pero ni idea de cómo.


Salud!

Leonardo
[MVP Visual Basic (6)] ¡Qué vergüenza!
[Maicrosoft LVP - MOP Certified]
leonardo<arroba>mvps<punto>org

Preguntas similare

Leer las respuestas

#1 Tristan
20/06/2004 - 21:58 | Informe spam
Sobre tu primera pregunta, creo que necesitaría ver algo más.

Sobre la segunda creo saber que ocurre. Shadows es una cláusula muy
peligrosa. Rompe la herencia de un miembro "escondiendo" el miembro. Pero
eso solo es así desde la propia clase hacia sus descendientes. Desde el
punto de vista de los antepasados, el miembro visible seguirá siendo el
antiguo. Ten en cuenta que shadows está pensado para permitir poner parches
sin que por eso falle el código antiguo.

Pero en tu caso no es necesario hacer Shadows. Overrides funciona
perfectamente. Tan solo hay que cambiar el atributo Browsable heredado de
UserControl.

<Browsable(True)> _
Public Overrides Property Text() As String
Get
Return Me.Label1.Text
End Get
Set(ByVal Value As String)
Label1.Text = Value
End Set
End Property


Juan Carlos Badiola
MVP - C#
Respuesta Responder a este mensaje
#2 Eduardo A. Morcillo [MS MVP VB]
21/06/2004 - 01:57 | Informe spam
El problema con la propiedad Text es que el UserControl le agrega estos
atributos:

Browsable(False)
EditorBrowsable(EditorBrowsableState.Never)
Bindable(False)
DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)

La ultima es la que causa que el diseñador no guarde el texto cuando lo
cambias. Cambia todos los atributos de la propiedad:

< _
Browsable(True), _
EditorBrowsable(EditorBrowsableState.Always), _
Bindable(True), _
DesignerSerializationVisibility(DesignerSerializationVisibility.Content)
_
_


Public Overrides Property Text() As String

En cuanto al problema con el PictureBox se debe a donde lo estas colocando
en el evento Resize. Yo no acomodaria los controles por codigo como lo estas
haciendo. Mas facil seria usar Anchor y Dock y que .net se ocupe de
ajustarlos.

Eduardo A. Morcillo [MS MVP VB]
http://www.mvps.org/emorcillo
Respuesta Responder a este mensaje
#3 Leonardo Azpurua
21/06/2004 - 02:55 | Informe spam
"Eduardo A. Morcillo [MS MVP VB]" <emorcilloATmvps.org> escribió en el
mensaje news:
El problema con la propiedad Text es que el UserControl le agrega estos
atributos:

Browsable(False)
EditorBrowsable(EditorBrowsableState.Never)
Bindable(False)
DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)

La ultima es la que causa que el diseñador no guarde el texto cuando lo
cambias. Cambia todos los atributos de la propiedad:

< _
Browsable(True), _
EditorBrowsable(EditorBrowsableState.Always), _
Bindable(True), _



DesignerSerializationVisibility(DesignerSerializationVisibility.Content)
_
> _
Public Overrides Property Text() As String

En cuanto al problema con el PictureBox se debe a donde lo estas colocando
en el evento Resize. Yo no acomodaria los controles por codigo como lo


estas
haciendo. Mas facil seria usar Anchor y Dock y que .net se ocupe de
ajustarlos.



Pues si: patrones de conducta atávicos.

Gracias!
Respuesta Responder a este mensaje
#4 Leonardo Azpurua
21/06/2004 - 16:54 | Informe spam
Hola, Eduardo:

< _
Browsable(True), _
EditorBrowsable(EditorBrowsableState.Always), _
Bindable(True), _



DesignerSerializationVisibility(DesignerSerializationVisibility.Content)

Ni aun así. Tuve que agregar la propiedad "Texto", con Browsable(True), y
reescribí Text como sinónimo de Texto (con Browsable = False) para mantener
el nombre y función de una propiedad estándar.

En cuanto al problema con el PictureBox se debe a donde lo estas colocando
en el evento Resize. Yo no acomodaria los controles por codigo como lo


estas
haciendo. Mas facil seria usar Anchor y Dock y que .net se ocupe de
ajustarlos.



El control en cuestión eventualmente "crecerá" para actuar como contenedor,
en ese caso necesitaría un Frame adicional para anclar los controles
visibles. No me había dado cuenta (hasta esta mañana) de que el PictureBox
estaba contenido dentro del GroupBox, y claro, al llevarlo inmediatamente a
la derecha del borde derecho, pues no se veía. Ya lo arreglé (queda para
"despues" comprender como funcionan los Anchors y Dockings).

Saludos y Gracias

Leonardo
[MVP Visual Basic]
[Maicrosoft LVP - MOP Certified]
leonardo<arroba>mvps<punto>org
Respuesta Responder a este mensaje
#5 Eduardo A. Morcillo [MS MVP VB]
21/06/2004 - 23:23 | Informe spam
Ni aun así. Tuve que agregar la propiedad "Texto", con
Browsable(True), y reescribí Text como sinónimo de Texto (con
Browsable = False) para mantener el nombre y función de una propiedad
estándar.



Es que me equivoque. Es DesignerSerializationVisibility.Visible en lugar de
DesignerSerializationVisibility.Content.

Eduardo A. Morcillo [MS MVP VB]
http://www.mvps.org/emorcillo
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida