Información general sobre editores de tipos de interfaz de usuario
Puede proporcionar una experiencia en tiempo de diseño personalizada para tipos de propiedad complejos mediante la implementación de un editor de tipos de interfaz de usuario.
Mostrar y editar tipos personalizados
Cuando expone un tipo personalizado como una propiedad, dispone de tres formas de editar el valor de la propiedad en un objeto PropertyGrid:
Puede editar la propiedad directamente como una cadena.Para ello es necesario un objeto TypeConverter para su tipo personalizado.Para obtener más información, vea Cómo: Implementar un convertidor de tipos.
Puede editar la propiedad con una interfaz de usuario desplegable.Esta opción resulta especialmente útil para propiedades que se pueden establecer con un solo clic.
Puede editar la propiedad con un cuadro de diálogo modal.Si su propiedad resulta particularmente compleja, quizá sea necesario un cuadro de diálogo completo para editarla correctamente.
Para habilitar la edición con un solo clic o con un cuadro de diálogo modal, deberá implementar un editor de tipos de interfaz de usuario con el fin de que interactúe con un objeto PropertyGrid.
Editores desplegables
Los editores desplegables son ideales para los tipos que se pueden establecer con un solo clic.Por ejemplo, puede editar las propiedades Dock y BackColor de la clase Control en un objeto PropertyGrid con un editor desplegable.
Para obtener acceso a un editor desplegable de tipos de interfaz de usuario, haga clic en el botón de flecha () que aparece junto a la entrada de la propiedad seleccionada en un objeto PropertyGrid.Aparece su interfaz de usuario personalizada, asociada al objeto PropertyGrid.La parte superior de su ventana se sitúa a lo largo de la parte inferior de la entrada de la propiedad, y su ancho coincide con el de la entrada de la propiedad.Esta ventana del editor también debe cerrarse después de que el usuario realice una selección.Su implementación debe llamar al método DropDownControl para establecer la posición y el tamaño de la ventana del editor de tipos de interfaz de usuario en el entorno de diseño, y al método CloseDropDown para cerrar la ventana.
Editores de cuadros de diálogo modales
Los editores modales son útiles para tipos que requieren una Interfaz de usuario totalmente interactiva.Por ejemplo, los editores de colecciones como el Editor de la colección TabPage de TabControl o el cuadro de diálogo Editar columnas del control DataGridView son editores modales.
Para obtener acceso a un editor modal de tipos de interfaz de usuario, haga clic en el botón de puntos suspensivos () que aparece junto a la entrada de la propiedad seleccionada en un objeto PropertyGrid.Aparece el cuadro de diálogo modal, con el que el usuario puede interactuar como si se tratara de un cuadro de diálogo típico.Su implementación debe llamar al método ShowDialog para establecer la posición y el tamaño del cuadro de diálogo en el entorno de diseño.
Implementar un editor de tipos con interfaz de usuario
Para implementar un editor de tipos de interfaz de usuario personalizado, debe realizar las tareas siguientes, como mínimo:
Defina una clase que se derive de UITypeEditor.
Reemplace el método GetEditStyle para informar al objeto PropertyGrid del tipo de estilo que utilizará el editor.
Reemplace el método EditValue para controlar la interfaz de usuario, el procesamiento de los datos proporcionados por el usuario y la asignación de valores.
Puede ampliar la compatibilidad adicional para dibujar la representación de un valor en un objeto PropertyGrid mediante las tareas siguientes:
Reemplace GetPaintValueSupported para indicar que el editor permite que se muestre la representación del valor.
Reemplace PaintValue para implementar la vista de la representación del valor.
Reemplace el método de constructor UITypeEditor si el editor debería tener comportamiento de inicialización.
[!NOTA]
Los editores de tipos de interfaz de usuario se implementan con frecuencia mediante tipos del espacio de nombres System.Windows.Forms, aunque no es un requisito.En .NET Framework, los editores de tipos de interfaz de usuario estándar derivan de UITypeEditor.
Derivar de la clase UITypeEditor
Su editor de tipos de interfaz de usuario personalizado debe derivar de la clase UITypeEditor.Defina un constructor predeterminado si su editor de tipos de interfaz de usuario requiere una inicialización especial.
Reemplazar el método GetEditStyle
Cuando selecciona un componente o un control en el diseñador, se redibuja la ventana Propiedades con los valores de propiedad del componente o control seleccionados.Cuando selecciona una propiedad, el entorno de diseño consulta al método GetEditStyle para determinar cómo debe representarse la entrada de la propiedad.
Su reemplazo devuelve un valor de la enumeración UITypeEditorEditStyle para comunicar el estilo apropiado del editor de tipos de interfaz de usuario.
En la siguiente tabla se muestra el comportamiento asociado a cada valor UITypeEditorEditStyle.
Nombre del miembro |
Comportamiento |
---|---|
No proporciona ningún componente interactivo de interfaz de usuario.Se utiliza un objeto TypeConverter adecuado para convertir una entrada de cadena en un valor de propiedad. |
|
Muestra un botón de flecha abajo () en la entrada de la propiedad.La interfaz de usuario se hospeda en una ventana desplegable. |
|
Muestra un botón de puntos suspensivos () en la entrada de la propiedad.La interfaz de usuario es un cuadro de diálogo modal. |
Reemplazar el método EditValue
El método EditValue muestra la interfaz de usuario y establece para la propiedad el valor seleccionado por el usuario.
Editor desplegable
Para un editor desplegable de tipos de interfaz de usuario, consulta la interfaz IWindowsFormsEditorService a un proveedor de servicios.Este servicio proporciona información de posición y tamaño para la interfaz de usuario.Su interfaz de usuario se implementará normalmente como Control.Su implementación de EditValue crea una instancia de este control, la inicializa con el valor de propiedad actual y después la pasa al método DropDownControl para que el entorno de diseño la ejecute.Cuando el usuario ha seleccionado un nuevo valor para la propiedad, su implementación de EditValue cierra la interfaz de usuario llamando a CloseDropDown.El valor devuelto de su implementación EditValue se convierte en el nuevo valor de propiedad que se muestra en un objeto PropertyGrid.
Editor modal
Para un editor modal de tipos de interfaz de usuario, consulta la interfaz IWindowsFormsEditorService a un proveedor de servicios.Este servicio proporciona información de posición para su cuadro de diálogo.Su interfaz de usuario se implementará normalmente como una clase derivada de Form.Su implementación de EditValue crea una instancia de este formulario, la inicializa con el valor de propiedad actual y después la pasa al método ShowDialog para que el entorno de diseño la ejecute.Si el valor devuelto por esta llamada es OK, recuperará el nuevo valor de propiedad del formulario y lo utilizará como valor devuelto.El valor devuelto de su implementación EditValue se convierte en el nuevo valor de propiedad que se muestra en un objeto PropertyGrid.
Parámetro ITypeDescriptorContext
El método EditValue recibe un parámetro ITypeDescriptorContext, que puede utilizar para consultar la información contextual sobre el entorno de diseño.Con este parámetro puede tener acceso a los miembros siguientes:
Un objeto PropertyDescriptor que representa los metadatos de la propiedad
Una propiedad Instance que hace referencia al componente que se selecciona en el objeto PropertyGrid.
La interfaz IContainer del componente.
Los métodos OnComponentChanging y OnComponentChanged que avisan al entorno de diseño cuando cambia el estado de un componente.
Proporcionar una representación gráfica del valor de la propiedad
Puede mostrar una representación gráfica del valor de su propiedad si reemplaza el método PaintValue.Puede utilizar el parámetro PaintValueEventArgs que se proporciona para dibujar la representación en un pequeño rectángulo situado en la parte izquierda de la entrada de la propiedad en un objeto PropertyGrid.
[!NOTA]
Asegúrese de mantener su representación gráfica dentro de los límites definidos por la propiedad Bounds del parámetro PaintValueEventArgs.
Reemplace el método GetPaintValueSupported para devolver true con el fin de avisar al entorno de diseño de que su editor de tipos de interfaz de usuario dibuja una representación personalizada de su valor.
Vea también
Tareas
Cómo: Crear un editor de tipos de interfaz de usuario