Novedades de .NET 6 (Windows Forms .NET)

En este artículo se describen algunas de las nuevas características y mejoras de Windows Forms en .NET 6.

Hay algunos cambios importantes que debe tener en cuenta al migrar desde .NET Framework a .NET 6. Para obtener más información, vea Cambios importantes en Windows Forms.

Plantillas actualizadas para C#

.NET 6 introduce muchos cambios en las plantillas estándar de aplicación de consola. En consonancia con esos cambios, las plantillas de Windows Forms para C# se han actualizado a fin de admitir global usingdirectivas, espacios de nombres con ámbito de archivo y tipos de referencia que aceptan valores NULL de forma predeterminada.

Una característica de las nuevas plantillas para C# que no se han llevado adelante con Windows Forms es instrucciones de nivel superior. La aplicación Windows Forms típica requiere el atributo [STAThread] y consta de varios tipos divididos entre varios archivos, como los archivos de código del diseñador, por lo que el uso de instrucciones de nivel superior no tiene sentido.

Nuevo arranque de la aplicación

Las plantillas que generan una nueva aplicación Windows Forms crean un método Main que actúa como punto de entrada para la aplicación cuando se ejecuta. Este método contiene código que configura Windows Forms y muestra el primer formulario, conocido como código de arranque:

class Program
{
    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new Form1());
    }
}

En .NET 6, estas plantillas se han modificado para usar el nuevo código de arranque, que invoca el método ApplicationConfiguration.Initialize.

class Program
{
    [STAThread]
    static void Main()
    {
        ApplicationConfiguration.Initialize();
        Application.Run(new Form1());
    }
}

Este método se genera automáticamente en tiempo de compilación y contiene el código para configurar Windows Forms. El archivo del proyecto también puede controlar estas opciones de configuración y puede evitar configurarla en el código. Por ejemplo, el método generado es similar al código siguiente:

public static void Initialize()
{
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    Application.SetHighDpiMode(HighDpiMode.SystemAware);
}

El nuevo código de arranque lo usa Visual Studio para configurar el diseñador visual de Windows Forms. Si opta por no usar el nuevo código de arranque, mediante la restauración del código antiguo y la omisión del método ApplicationConfiguration.Initialize, el diseñador visual de Windows Forms no respetará la configuración de arranque establecida.

La configuración generada en el método Initialize se controla mediante el archivo del proyecto.

Configuración de la aplicación a nivel de proyecto

Para complementar la característica nueva de arranque de la aplicación de Windows Forms, se deben establecer algunos valores Application previamente establecidos en el código de inicio de la aplicación en el archivo de proyecto. El archivo de proyecto puede configurar las siguientes opciones de aplicación:

Propiedad de proyecto Valor predeterminado API correspondientes
ApplicationVisualStyles true Application.EnableVisualStyles
ApplicationUseCompatibleTextRendering false Application.SetCompatibleTextRenderingDefault
ApplicationHighDpiMode SystemAware Application.SetHighDpiMode
ApplicationDefaultFont Segoe UI, 9pt Application.SetDefaultFont

En el ejemplo siguiente se muestra un archivo de proyecto que establece estas propiedades relacionadas con la aplicación:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>WinExe</OutputType>
    <TargetFramework>net6.0-windows</TargetFramework>
    <Nullable>enable</Nullable>
    <UseWindowsForms>true</UseWindowsForms>
    <ImplicitUsings>enable</ImplicitUsings>

    <ApplicationVisualStyles>true</ApplicationVisualStyles>
    <ApplicationUseCompatibleTextRendering>false</ApplicationUseCompatibleTextRendering>
    <ApplicationHighDpiMode>SystemAware</ApplicationHighDpiMode>
    <ApplicationDefaultFont>Microsoft Sans Serif, 8.25pt</ApplicationDefaultFont>

  </PropertyGroup>

</Project>

El diseñador visual de Windows Forms usa esta configuración. Para obtener más información, consulte la sección de mejoras del diseñador de Visual Studio.

Cambio de la fuente predeterminada

Windows Forms en .NET Core 3.0 introdujo una nueva fuente predeterminada para Windows Forms: Segoe UI, 9 pt. Esta fuente se alineaba mejor con las directrices de experiencia del usuario (UX) de Windows. Sin embargo, .NET Framework usa Microsoft Sans Serif, 8.25 pt como fuente predeterminada. Este cambio hizo que algunos clientes migraran las aplicaciones grandes que utilizaban un diseño de píxel perfecto de .NET Framework a .NET. La única manera de cambiar la fuente de toda la aplicación era editar todos los formularios del proyecto, estableciendo la propiedad Font en una fuente alternativa.

Ahora la fuente predeterminada se puede establecer de dos maneras:

  • Establecer la fuente predeterminada en el archivo de proyecto que usará el código de arranque de la aplicación:

    Importante

    Ésta es la opción preferida. El uso del proyecto para configurar el nuevo sistema de arranque de la aplicación permite a Visual Studio usar estas opciones en el diseñador.

    En el ejemplo siguiente el archivo de proyecto configura Windows Forms para usar la misma fuente que usa .NET Framework.

    <Project Sdk="Microsoft.NET.Sdk">
    
      <!-- other settings -->
    
      <PropertyGroup>
        <ApplicationDefaultFont>Microsoft Sans Serif, 8.25pt</ApplicationDefaultFont>
      </PropertyGroup>
    
    </Project>
    

O bien

  • Llamar a la API Application.SetDefaultFont de la forma antigua (pero sin compatibilidad con el diseñador):

    class Program
    {
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.SetHighDpiMode(HighDpiMode.SystemAware);
            Application.SetDefaultFont(new Font(new FontFamily("Microsoft Sans Serif"), 8.25f));
            Application.Run(new Form1());
        }
    }
    

Mejoras del diseñador de Visual Studio

El diseñador visual de Windows Forms ahora refleja con precisión la fuente predeterminada. Las versiones anteriores de Windows Forms para .NET no mostraban correctamente la fuente Segoe UI en el diseñador visual y de hecho estaba diseñando el formulario con la fuente predeterminada del .NET Framework. Debido a la característica nueva de arranque de la aplicación, el diseñador visual refleja con precisión la fuente predeterminada. Además, el diseñador visual respeta la fuente predeterminada establecida en el archivo de proyecto.

El diseñador de Windows Forms usa la configuración de fuente predeterminada en Visual Studio

Más diseñadores en tiempo de ejecución

Los diseñadores que existían en el .NET Framework y habilitaban la creación de un diseñador de uso general, por ejemplo, la creación de un diseñador de informes, se han agregado a .NET 6:

Mejoras de PPP elevado para PerMonitorV2

Se ha mejorado la representación con PerMonitorV2 de valores altos de PPP:

  • Los controles se crean con el mismo reconocimiento de PPP que la aplicación.

  • Los controles de contenedor y las ventanas secundarias de MDI han mejorado los comportamientos de escalado.

    Por ejemplo, en .NET 5, mover una aplicación de Windows Forms desde un monitor con un escalado del 200 % a un monitor con un escalado del 100 % daba lugar a controles mal ubicados. Esto se ha mejorado considerablemente en .NET 6:

    Mejoras de PPP elevado en .NET 6 para Windows Forms

Nuevas API.

Nuevas API de Visual Basic

API actualizadas

Accesibilidad mejorada

Los patrones de automatización de la interfaz de usuario de Microsoft funcionan mejor con herramientas de accesibilidad como Narrador y Jaws.

Vea también