# Windows Forms

Windows Forms (o formularios Windows) es el nombre dado a la interfaz de programación de aplicación gráfica (API) que se incluye como parte de Microsoft .NET Framework, que proporciona acceso a los elementos de la interfaz de Microsoft Windows nativas envolviendo la API de Windows existente en código administrado.
Al igual que Abstract Windows Toolkit (AWT), la API de Java equivalente, Windows Forms era una forma temprana y fácil de proporcionar componentes de la interfaz gráfica de usuario para el .NET Framework. Windows Forms, está construido sobre la API de Windows existente y algunos controles sólo envuelven componentes subyacentes de Windows.

## Características

* Implantación
Puede ejecutarse sin alterar el Registro.
* Gráficos
Incluye GDI+
* Respuesta
Velocidad de respuesta más rápida posible para aplicaciones interactivas.
* Modelo de Programación
Basado en un modo de intercambio de mensajes Win32 en el lado cliente.
* Seguridad
Seguridad basada en código y basada en roles.
* Plataforma
Requiere el .NET Framework ejecutándose en la máquina cliente.

## Ventajas y desventajas

Ventajas:
* Es uno de los lenguajes más utilizados, así que es muy sencillo encontrar información, documentación y fuentes para los proyectos.
* Tiene acceso a casi toda la API de Windows y puede usar la plataforma de sistemas de Windows.
Desventajas
* Pese a ser una programación orientada a objetos, tiene un soporte escaso.
* Para crear aplicaciones multi-hilo, es necesario realizar llamadas a la API de Windows.

## Clasificación

Las clases del Namespace System.Windows.Forms se pueden clasificar en 2 grupos: objetos visuales y no visuales.
Los objetos visuales de Windows Forms se dividen en 4 categorías:
* Control, UserControl y Form: La clase Control es la clase base que tiene la funcionalidad de todos los controles que se usan en un formulario (clase Form). Mientras que la clase User Control sirve para crear controles personalizados que están compuestos por otros controles Windows.
* Controls: Se refiere a los controles Windows que al arrastrarse a un formulario se muestran en el diseñador de formularios de Visual Studio .NET, tales como controles de entrada de datos: TextBox y ComboBox, de salida de datos: Label y ListView, de comandos: Button y ToolBar, etc.
* Componentes: Los componentes son clases similares a los controles pero que no heredan del Control y que al arrastrarse a un formulario no se ven en el diseñador de formularios sino en el diseñador de componentes de visual studio .NET, tales como componentes de información al usuario: ToolTip y ErrorProvider, componentes de menús: MainMenu y ContextMenu, componentes de ayuda: Help y HelpProvider.
* Common Dialog Boxes: Los cuadros de diálogos comunes son objetos que al arrastrarse al formulario también se ubican en el Diseñador de Componentes de Visual Studio .NET, tales como diálogos de archivos: OpenFileDialog y SaveFIleDialog, diálogos de color: ColorDialog, diálogos de Fuentes: FontDialog y los diálogos de impresión: PrintDialog, PageSetupDialog y PrintPreviewDialog.
Existen 2 categorías de objetos no visuales en Windows Forms:
* Objetos: Aplication, Clipboard, CurrencyManager, Cursor, Screen, etc.
* Argumentos de Eventos: Heredan de System.EventArgs, tales como: KeyEventArgs, KeyPressEventArgs, MouseEventArgs, etc.

## Edición de texto

* TextBox
Muestra el texto especificado en tiempo de diseño que pueden editar los usuarios en tiempo de ejecución, o que se pueden cambiar mediante programación.
* RichTextBox
Permite mostrar el texto con formato en texto sin formato o en formato de texto enriquecido (RTF).
* MaskedTextBox
Restringe el formato de los datos proporcionados por el usuario.

## Pantalla de información

Label: Muestra texto que los usuarios no pueden modificar directamente.
LinkLabel: Muestra el texto como un vínculo de estilo Web y desencadena un evento cuando el usuario hace clic en el texto especial. Normalmente, el texto es un vínculo a otra ventana o un sitio Web.
StatusStrip: Muestra información sobre el estado actual de la aplicación mediante un área de marco, normalmente en la parte inferior de un formulario primario.
ProgressBar: Muestra el progreso actual de una operación al usuario.

## Comandos
#### Button

Inicia, detiene o interrumpe un proceso.

#### LinkLabel

Muestra el texto como un vínculo de estilo Web y desencadena un evento cuando el usuario hace clic en el texto especial. Normalmente, el texto es un vínculo a otra ventana o un sitio Web.

#### ToolStrip

Crea barras de herramientas que pueden tener Microsoft Windows XP, Microsoft Office, Microsoft Internet Explorer o apariencia personalizada, con o sin temas.

## Valor de configuración

CheckBox: Muestra una casilla y una etiqueta para el texto. Se utiliza normalmente para establecer opciones.
CheckedListBox: Muestra una lista desplazable de elementos, cada uno acompañado de una casilla.
RadioButton: Muestra un botón que se puede activar o desactivar.

## Presentación de datos

DataGridView
El control DataGridView proporciona una tabla personalizable para mostrar los datos La clase DataGridView permite personalizar celdas, filas, columnas y bordes

## Visualización de gráficos

PictureBox
Muestra archivos gráficos, como mapas de bits e iconos, en un marco.

## Almacenamiento de gráficos

ImageList
Sirve como repositorio para las imágenes ImageList controles y las imágenes que contienen se pueden volver a usar desde una aplicación a la siguiente.

### Referencias Bibliográficas

* ↑ Guille, Publicado por El. «Qué es Windows Forms». Consultado el 21 de julio de 2021.
* Datos: Q613361