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.
Leer las respuestas