DesignerSerializationVisibility

22/08/2006 - 19:52 por Ramón | Informe spam
Hola.

Tengo el siguente problema y quisiera ver si alguien puediera ayudarme a
resolverlo.

Cree un control compuesto al cual le agrego un TextBox de un tercero,
este control Textbox tiene una coleccion de botones que expone como
propiedad.

Me interesa exponer ese TextBox para que mis usuarios finales (otros
programadores) puedan cambiar propiedades del TextBox, hago lo siguiente
para que el TextBox contenido dentro de mi control pueda serializarce y
las propiedades que cambien mis usuarios no se pierdan.

<TypeConverter(GetType(ExpandableObjectConverter)),
DesignerSerializationVisibility(DesignerSerializationVisibility.Content)> _
ReadOnly Property TextBox() As
Infragistics.Win.UltraWinEditors.UltraTextEditor
Get
Return txtText
End Get
End Property


Todo funciona bien hasta este momento, los otros programadores pueden
usar el control sin problemas y las propiedades que modifiquen se quedan
guardadas dentro del codigo del diseñador de windows forms.

Pero me interesa agregarle cierta funcionalidad a ese control, por
ejemplo que con solo cambiar una propiedad de mi control automaticamente
se agregue un boton que permita abrir una caja de dialogo para
seleccionar una carpeta por lo cual hago lo siguiente.


Property OpenFolder() As Boolean
Get
Return m_OpenFolder
End Get
Set(ByVal value As Boolean)
m_OpenFolder = value
If m_OpenFolder And
txtText.ButtonsRight.IndexOf("xOpenDialog") < 0 Then
xButton.Text = "..."
txtText.ButtonsRight.Add(xButton)
AddHandler xButton.Click, AddressOf xOpenFolder
ElseIf Not m_OpenFolder And
txtText.ButtonsRight.IndexOf("xOpenDialog") >= 0 Then

txtText.ButtonsRight.Remove(txtText.ButtonsRight("xOpenDialog"))
End If
End Set
End Property

Bueno, el problema es que al agregar el boton desde la propiedad de mi
control el codigo se serializa y lo agrega al codigo del diseñador de
windows forms, por lo cual en tiempo de ejecucion el boton ya existe y
manda una excepcion.

Yo quisiera saber si existe algun modo de evitar este comportamiento.

Saludos y muchas gracias por la ayuda que puedar proporcionarme.
Ramón Hernández.

Preguntas similare

Leer las respuestas

#1 Ramón
25/08/2006 - 20:35 | Informe spam
Hola.

Bueno, creo que eso no se puede hacer, pero lo que si seguro se puede
hacer es forzar al programador a que ponga la propiedad por codigo y no
con el diseñador, de esa forma el codigo ya no se serializa y funciona y
presenta el boton aunque sea solo en tiempo de ejecucion.

He visto que hay controles que no exponen todas sus propiedades en el
diseñador y hay algunas que solo son visibles por codigo.

Alguien sabra como se puede poner una propiedad que solo sea visible por
codigo y no desdes el diseñador?

Saludos y nuevamente gracias.
Respuesta Responder a este mensaje
#2 Jesús López
29/08/2006 - 16:08 | Informe spam
Decora la propiedad con el atributo Browsable(False)

Saludos:

Jesús López


"Ramón" escribió en el mensaje
news:%
Hola.

Bueno, creo que eso no se puede hacer, pero lo que si seguro se puede
hacer es forzar al programador a que ponga la propiedad por codigo y no
con el diseñador, de esa forma el codigo ya no se serializa y funciona y
presenta el boton aunque sea solo en tiempo de ejecucion.

He visto que hay controles que no exponen todas sus propiedades en el
diseñador y hay algunas que solo son visibles por codigo.

Alguien sabra como se puede poner una propiedad que solo sea visible por
codigo y no desdes el diseñador?

Saludos y nuevamente gracias.
Respuesta Responder a este mensaje
#3 Ramón
30/08/2006 - 00:21 | Informe spam
Muchisimas gracias.

Tambien gracias a eso descubri que si pongo "<" me presenta el intellysense.

Jesús López escribió:
Decora la propiedad con el atributo Browsable(False)

Saludos:

Jesús López


"Ramón" escribió en el mensaje
news:%
Hola.

Bueno, creo que eso no se puede hacer, pero lo que si seguro se puede
hacer es forzar al programador a que ponga la propiedad por codigo y no
con el diseñador, de esa forma el codigo ya no se serializa y funciona y
presenta el boton aunque sea solo en tiempo de ejecucion.

He visto que hay controles que no exponen todas sus propiedades en el
diseñador y hay algunas que solo son visibles por codigo.

Alguien sabra como se puede poner una propiedad que solo sea visible por
codigo y no desdes el diseñador?

Saludos y nuevamente gracias.




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