Menú de navegaciónMenú
Categorías

La mejor forma de Aprender Programación online y en español www.campusmvp.es

Windows Forms en .NET Core: Controles inexistentes y cómo sustituirlos

Como seguramente sabrás ya, .NET Core 3.x incluye la capacidad de crear aplicaciones de escritorio para Windows basadas en la clásica y archiconocida API de Windows Forms.

Windows Forms es un conjunto de APIS de interfaz de usuario que se incluían como parte de la plataforma .NET ya desde su versión 1.0, hace un montón de años y que permiten crear interfaces de usuario de manera visual para todo tipo de aplicaciones de escritorio. Además tiene la capacidad de enlazar automáticamente los controles a datos de modo que crear ciertos tipos de interfaces de acceso a datos CRUD (para leer, escribir, actualizar y borrar) es una tarea muy sencilla. En 2018 lo hicieron Open Source y con .NET Core 3.0 en 2019 lanzaron la primera versión para esta plataforma de desarrollo (en .NET "clásico" siempre ha estado disponible) que incluye también las herramientas visuales (aunque en el momento de escribir esto están todavía en Beta).

A lo largo de los años ha habido intentos de convertir Windows Forms en una biblioteca gráfica multiplataforma, al más puro estilo Java AWT, siendo la más relevante la implementación para Mono. Pero la mayor "pega" de Windows Forms a día de hoy es que está restringida a Windows, ya que tiene una dependencia muy alta en las APIs nativas de Windows.  No obstante, sigue siendo una estupenda opción para crear aplicaciones bajo este sistema operativo, y extiende un poco más el ámbito al que llega .NET Core.

Al hacer la migración de .NET framework a .NET Core Microsoft primero intentó implementar todos los controles, incluso los más antiguos y así parecía que sería en la beta del diseñador que salió con .NET Core 3.0 en septiembre de 2019. Sin embargo, poco después, en la versión 3.1 de noviembre de 2019 decidió que ciertos controles no merecían la pena y que los iba a eliminar. Esto no supone mucho problema salvo que quieras migrar directamente una aplicación de .NET "clásico" a .NET Core (cosa que tampoco tiene mucho sentido de todos modos, dado que sólo funcionará en Windows igualmente y pocas ventajas vas a obtener), ya que todos ellos tienen un control alternativo que permite hacer lo mismo o muy parecido. Y eso es precisamente lo que vamos a ver hoy.

Si ya conoces Windows Forms "clásico" y quieres desarrollar con Windows Forms para .NET Core, debes saber qué controles han desaparecido y cuáles son las alternativas que tienes para utilizar.

Esta es la lista de controles de Windows Forms "clásico" en .NET 4.8 que no se han migrado a .NET Core:

Pero la buena noticia es que en su mayoría tienen un equivalente más moderno que hace lo mismo o es muy parecido en cuanto a funcionalidad, por lo que no te resultará complicado conseguir lo que necesitas.

La siguiente tabla te muestra cuáles son esas equivalencias:

Control eliminado Control alternativo Clases eliminadas relacionadas
DataGrid DataGridView DataGridCell, DataGridRow, DataGridTableCollection, DataGridColumnCollection, DataGridTableStyle, DataGridColumnStyle, DataGridLineStyle, DataGridParentRowsLabel, DataGridParentRowsLabelStyle, DataGridBoolColumn, DataGridTextBox, GridColumnStylesCollection, GridTableStylesCollection, HitTestType
ToolBar ToolStrip ToolBarAppearance
ToolBarButton ToolStripButton ToolBarButtonClickEventArgs, ToolBarButtonClickEventHandler, ToolBarButtonStyle, ToolBarTextAlign
ContextMenu ContextMenuStrip  
Menu ToolStripDropDown, ToolstripDropDownMenu MenuItemCollection
MainMenu MenuStrip  
MenuItem ToolstripMenuItem

Además existen algunas diferencias menores más entre la versión para .NET 4.8 y la versión para .NET Core, como por ejemplo:

  • El tipo de letra tradicional es Microsoft Sans Serif a tamaño 8pt, pero en .NET Core se ha cambiado a Segoe UI a 9pt, para ofrecer un aspecto más moderno.

Comparación de tipo de letra por defecto entre ambas versiones

  • Se ha cambiado el diálogo de selección de carpetas desde el tradicional en forma de árbol (horrible y tedioso de usar) por el más moderno que sale en aplicaciones recientes, y que tiene más funcionalidad. Si por alguna extraña razón quieres conservar el antiguo sólo tienes que establecer la propiedad AutoUpgradeEnabled = false para el control y te lo conservará.

Comparación del diálogo tradicional y el nuevo

  • Se ha eliminado el ajuste llamado AllowUpdateChildControlIndexForTabControls introducido con .NET 4.6 y que permitía evitar que los controles dentro de una pestaña reordenasen automáticamente su orden de tabulación. Ahora siempre lo hacen y no se puede desconectar, aunque raramente se usaba para algo.
  • El control RichTextBox para edición enriquecida de texto usaba diferentes versiones del editor según la versión de .NET. Ahora sólo se utiliza la última versión.
  • El atributo SerializableAtribute que indicaba que un control se podía persistir en formato binario para posteriormente poder cargarlo, se ha eliminado de los controles en los que realmente no es posible hacerlo porque no tienen representación binaria. Es una mejora y no tanto una limitación.
campusMVP campusMVP es la mejor forma de aprender a programar online y en español. En nuestros cursos solamente encontrarás contenidos propios de alta calidad (teoría+vídeos+prácticas) creados y tutelados por los principales expertos del sector. Nosotros vamos mucho más allá de una simple colección de vídeos colgados en Internet porque nuestro principal objetivo es que tú aprendas. Ver todos los posts de campusMVP
Archivado en: Lenguajes y plataformas

Boletín campusMVP.es

Solo cosas útiles. Una vez al mes.

🚀 Únete a miles de desarrolladores

DATE DE ALTA

x No me interesa | x Ya soy suscriptor

La mejor formación online para desarrolladores como tú

Agregar comentario

Los datos anteriores se utilizarán exclusivamente para permitirte hacer el comentario y, si lo seleccionas, notificarte de nuevos comentarios en este artículo, pero no se procesarán ni se utilizarán para ningún otro propósito. Lee nuestra política de privacidad.