Editor de tipos en VB Net

17/02/2005 - 18:29 por Pedro Rivera | Informe spam
La situación es la siguiente: Estoy diseñando un control
en Visual Basic Net. Este control expone algunas
propiedades. Yo quiero que una de esas propiedades tenga
como tipo una estructura, es decir que se vea así:

public property Prop() as Estructura
get
return MiEstructura
end get
set(byval valor as estructura)
MiEstructura=valor
end set

y necesito que el usuario pueda ver y modificar esta
propiedad desde la ventana de propiedades. Al parecer
necesito hacer algo con la clase
System.ComponentModel.TypeConverter ¿Alguién me puede dar
un ejemplo de su codificación e implementación?

También necesito que dicha propiedad muestre un cuadro de
diálogo que al cerrarse regrese un valor del tipo de la
estructura. Esto es lo que hace por ejemplo la
propiedad "Font" de cualquier control. Al parecer
necesito haceralgo con la clase
System.Drawing.Design.UITiypeEditor ¿Alguién me puede dar
un ejemplo de su codificación e implementación?

He visto manuales, códigos y la documentación de MSDN
Library pero no encuentro la forma de hacerlo.
 

Leer las respuestas

#1 Eduardo A. Morcillo [MS MVP VB]
18/02/2005 - 04:32 | Informe spam
Para lo primero utiliza ExpandableObjectConverter. Con
ExpandableObjectConverter en la ventana de propiedades se mostraran todas
las propiedades del objeto en forma desplegable. Como es una estructura,
deberas crear una propiedad para cada campo que le hayas definido y/o
quieras que se vea.

Para lo segundo deberas crear un clase derivada de UITypeEditor e
implementar como minimo los metodos GetEditStyle y EditValue. El primero le
indica a la ventana de propiedades si se va a mostrar un dialogo modal o un
drop down. El segundo te notifica que se quiere editar la propiedad y en el
deberas mostrar el dialogo y devolver el nuevo valor. Ademas, deberas crear
un control o formulario (segun sea dropdown o modal) que permita hacer la
edición. Por ejemplo:

Private Class MiEstructuraEditor
Inherits UITypeEditor

Public Overloads Overrides Function GetEditStyle( _
ByVal context As ITypeDescriptorContext) As UITypeEditorEditStyle

Return UITypeEditorEditStyle.Modal

End Function

Public Overloads Overrides Function EditValue( _
ByVal context As ITypeDescriptorContext, _
ByVal provider As System.IServiceProvider, _
ByVal value As Object) As Object

Dim editor As IWindowsFormsEditorService
editor CType(provider.GetService(GetType(IWindowsFormsEditorService)),
IWindowsFormsEditorService)

' Aqui inicializa tu form para editar el valor y
' muestralo con editor.ShowDialog si es un dialogo o
' editor.DropDownControl si es un dropdown

' Devuelve el nuevo valor de la propiedad
' como resultado de este metodo

End Function

End Class

Luego para que funcione deberas asociar estas dos clases a la propiedad del
control o a la estructura (yo te recomiendo la estructura porque asi en
cualquier propiedad de ese tipo te habilita la edicion) usando los atributos
TypeConverterAttribute y EditorAttribute. Por ejemplo:

<TypeConverter(GetType(ExpandableObjectConverter)), _
Editor(GetType(MiEstructuraEditor), GetType(UITypeEditor))> Public Structure
MiEstructura
'...
End Structure

Eduardo A. Morcillo [MS MVP VB]
http://www.mvps.org/emorcillo

Inteligencia militar son dos términos contradictorios.
Groucho Marx

Preguntas similares