Novità di Windows Forms

Novità di Windows Forms

Novità di Windows Forms in .NET 10: Una Guida Tecnica Completa

Indice – Novità di Windows Forms

  1. Introduzione a Windows Forms e .NET 10
  2. Dark Mode: Adattamento al Design Moderno
  3. Control.InvokeAsync: Programmazione Asincrona Nativa
  4. Form Screen Capture Mode: Protezione dei Dati Sensibili
  5. Sviluppo Assistito da AI con GitHub Copilot
  6. Miglioramenti alle API e Ottimizzazioni
  7. Conclusioni e Formazione Professionale

1. Introduzione a Windows Forms e .NET 10

Windows Forms rappresenta un framework UI consolidato per la creazione di applicazioni desktop ricche per Windows, supportando un ampio set di funzionalità di sviluppo tra cui controlli, grafica, data binding e gestione dell’input utente. Con il rilascio di .NET 10, Microsoft ha introdotto significativi miglioramenti che modernizzano questa tecnologia mantenendone la semplicità e la produttività che l’hanno resa popolare tra gli sviluppatori.

.NET 10 ha integrato completamente il supporto asincrono per i form, con l’aggiunta di weak reference per le task asincrone, abilitando UI responsive nella gestione di finestre multiple. Questa release segna un importante passo avanti nella modernizzazione di Windows Forms, rendendolo adatto anche per applicazioni contemporanee che richiedono interfacce reattive e design moderni.

L’ecosistema di sviluppo si è evoluto significativamente: il codice sorgente di Windows Forms è ora open-source e ospitato su GitHub, eseguendo sulla piattaforma .NET moderna. Questo approccio aperto consente alla community di contribuire attivamente al miglioramento del framework e di seguire da vicino l’evoluzione delle funzionalità.

2. Dark Mode: Adattamento al Design Moderno

Una delle richieste più frequenti da parte degli sviluppatori è finalmente stata soddisfatta: il supporto nativo per il dark mode. Windows Forms per .NET 9 aveva introdotto lo styling visivo preliminare per il dark mode in modalità opt-in con un errore di compilazione da sopprimere, ma questa funzionalità non è più protetta da questo errore a partire da .NET 10.

Implementazione del Dark Mode

Il dark mode può essere configurato attraverso tre modalità distinte:

// All'avvio dell'applicazione in Program.cs
Application.SetColorMode(SystemColorMode.Dark);     // Dark mode forzato
Application.SetColorMode(SystemColorMode.System);   // Segue le impostazioni di Windows
Application.SetColorMode(SystemColorMode.Classic);  // Light mode tradizionale (default)

I controlli seguono la modalità colore impostata per l’applicazione, dark o light, e potrebbero esserci casi in cui si compongono e si disegnano controlli propri usando controlli comuni Win32 esistenti, come la barra di scorrimento. Per questi scenari specifici, è possibile optare per l’applicazione o l’esclusione dal tema sovrascrivendo la proprietà Control.CreateParams e chiamando SetStyle(ControlStyles.ApplyThemingImplicitly, true).

Nuove API per la Personalizzazione

.NET 10 introduce proprietà specifiche per personalizzare i colori dei form:

  • FormBorderColor: controllo del colore del bordo della finestra
  • FormCaptionBackColor: personalizzazione del colore di sfondo della barra del titolo

È importante notare che la scelta del nome “caption” deriva dalla nomenclatura Win32 per mantenere coerenza con l’API sottostante che viene esposta.

3. Control.InvokeAsync: Programmazione Asincrona Nativa

Uno dei cambiamenti più significativi in .NET 10 è l’integrazione completa delle API asincrone. Control.InvokeAsync esegue callback asincroni sul thread che possiede l’handle del controllo, con il task restituito che rappresenta l’operazione di marshalling del callback al thread UI.

Perché InvokeAsync è Importante

Tradizionalmente, Windows Forms è stato un framework single-threaded basato sul message loop. Mentre Control.Invoke attende che il thread UI completi il delegate (bloccante), InvokeAsync consegna il task al thread UI e ritorna istantaneamente (non-bloccante). Questa differenza fondamentale rende InvokeAsync ideale per scenari asincroni moderni.

Esempi Pratici di Utilizzo

Aggiornamento UI da operazioni asincrone:

private async void LoadDataButton_Click(object sender, EventArgs args)
{
    loadingLabel.Text = "Caricamento...";
    
    // Operazione I/O asincrona
    var data = await FetchDataFromApiAsync();
    
    // InvokeAsync per aggiornare la UI
    await this.InvokeAsync(async (CancellationToken token) =>
    {
        dataGridView.DataSource = data;
        loadingLabel.Text = "Completato";
        await AnimateCompletionAsync(token);
    });
}

Gestione di animazioni fluide:

private async Task AnimateTitleBarAsync(CancellationToken cancellationToken)
{
    var colors = new[] { Color.Blue, Color.Purple, Color.Red };
    int index = 0;
    
    while (!cancellationToken.IsCancellationRequested)
    {
        await this.InvokeAsync(() => 
        {
            this.FormCaptionBackColor = colors[index];
        });
        
        index = (index + 1) % colors.Length;
        await Task.Delay(1000, cancellationToken);
    }
}

Il CancellationToken viene preso in considerazione sia quando si effettua il marshalling del callback al thread che possiede l’handle del controllo, sia quando si esegue il callback, offrendo un controllo completo sulla cancellazione delle operazioni.

Vantaggi rispetto a BeginInvoke/Invoke

  • Non bloccante: il thread chiamante non viene bloccato
  • Await nativo: supporto completo per async/await pattern
  • Gestione eccezioni: le eccezioni vengono propagate correttamente al chiamante
  • Cancellation support: integrazione nativa con CancellationToken

4. Form Screen Capture Mode: Protezione dei Dati Sensibili

Una nuova API è stata introdotta per prevenire alle applicazioni di screen capture (che usano l’API Windows) di catturare un form, utile per proteggere informazioni sensibili come nomi utente, ID utente o password.

Scenari di Utilizzo

Questa funzionalità è particolarmente rilevante per:

  • Applicazioni Line of Business che gestiscono dati sensibili dei clienti
  • Software medico con informazioni protette da HIPAA
  • Applicazioni finanziarie con dati regolamentati
  • Demo e registrazioni Teams dove si vuole nascondere contenuti specifici

Implementazione

public class SensitiveDataForm : Form
{
    public SensitiveDataForm()
    {
        InitializeComponent();
        
        // Previene la cattura dell'intera finestra
        this.FormScreenCaptureMode = ScreenCaptureMode.HideWindow;
        
        // Oppure nasconde solo il contenuto
        this.FormScreenCaptureMode = ScreenCaptureMode.HideContent;
    }
}

È fondamentale comprendere che questa protezione opera a livello di singolo form, non dell’intera applicazione. Questo consente una granularità precisa: è possibile avere form normali per la navigazione generale e form protetti per le sezioni contenenti dati sensibili.

5. Sviluppo Assistito da AI con GitHub Copilot

Il video presentato dimostra un approccio rivoluzionario allo sviluppo Windows Forms: l’utilizzo di GitHub Copilot per generare intere applicazioni attraverso prompt ben strutturati. Questo rappresenta un cambio di paradigma significativo nel modo in cui gli sviluppatori possono approcciare la creazione di interfacce.

GitHub Copilot Custom Agents

Microsoft ha introdotto agenti personalizzati per sviluppatori .NET, incluso il WinForms Expert che si specializza in pattern di design UI, implementazione di MVVM e MVP per codice UI manutenibile e scalabile, e protezione del file designer.cs.

Uno dei problemi storici nell’uso di AI per Windows Forms era la corruzione dei file .Designer.cs. Con il WinForms Expert, sono stati inseriti guardrail che proteggono i file .Designer.cs in modo che quando Copilot termina il task, si possa ancora utilizzare Visual Studio Designer.

Custom Instructions per Windows Forms

L’approccio dimostrato nel video utilizza file di istruzioni personalizzati nella cartella .github/instructions/ che contengono:

  • Convenzioni di progetto: standard di naming, pattern architetturali
  • Requisiti UI: sizing dei controlli, gestione DPI, accessibilità
  • Best practices: gestione threading, async patterns, memory management

Esempio di instruction file:

# Windows Forms Project Guidelines

## Control Sizing
- Use AutoSize for buttons and labels
- Set MinimumSize to the largest button's size for consistency
- Default font size: 11pt or 12pt for high-DPI scenarios

## Async Patterns
- Always use InvokeAsync for UI updates from background threads
- Implement CancellationToken support for long-running operations
- Avoid blocking calls on the UI thread

## Dark Mode
- Ensure custom-drawn controls respect SystemColorMode
- Test all UI elements in both light and dark themes

Workflow AI-Assisted

Le funzionalità di GitHub Copilot includono modifica multi-file collaborativa, supporto per immagini e screenshot attraverso Vision, e Custom Instructions che permettono a Copilot di adattarsi al workflow unico del team.

Il processo dimostrato nel video segue questi step:

  1. Planning Phase: Copilot analizza i requisiti e crea un piano di sviluppo visibile in tempo reale
  2. Code Generation: genera automaticamente il codice seguendo le custom instructions
  3. Compilation & Testing: compila e testa iterativamente
  4. Refinement: accetta feedback e itera fino al risultato desiderato

6. Miglioramenti alle API e Ottimizzazioni – Novità di Windows Forms

Oltre alle funzionalità principali, .NET 10 introduce numerosi miglioramenti incrementali:

Clipboard Modernizzato

.NET 10 sta rendendo obsoleti certi metodi della clipboard per indicare che non dovrebbero essere usati, con l’aggiunta di più metodi per supportare la serializzazione JSON con i dati della clipboard, aggirando la necessità di BinaryFormatter. Questo migliora la sicurezza eliminando vettori di deserializzazione non sicuri.

UITypeEditor Portati

Diversi tipi UITypeEditor sono stati portati da .NET Framework, inclusi ToolStripCollectionEditor e vari editor relativi al controllo DataGridView, migliorando l’esperienza di design-time.

Bug Fix e Stabilità

Tra i bug risolti in .NET 10:

  • Correzione dell’InvalidOperationException quando DataGridView era in modalità edit durante la chiusura del dialog
  • Miglioramento dell’errore del compilatore WFO1000 per ridurre falsi positivi
  • Risoluzione di memory leak nel componente MSHTML
  • Miglioramento del supporto per screen reader NVDA

7. Conclusioni e Formazione Professionale

Windows Forms in .NET 10 rappresenta un perfetto equilibrio tra tradizione e innovazione. Mantenendo la semplicità e la produttività che hanno reso questo framework popolare, Microsoft ha introdotto funzionalità moderne essenziali: dark mode nativo, programmazione asincrona completa, protezione dei dati sensibili e integrazione avanzata con strumenti AI.

L’Importanza della Formazione Continua

In un ecosistema tecnologico in rapida evoluzione, la formazione continua del personale IT rappresenta l’unica risorsa che consente di mantenere gli sviluppatori aggiornati e renderli performanti sul lavoro. Le nuove funzionalità di .NET 10 richiedono non solo comprensione teorica, ma anche esperienza pratica guidata per essere implementate efficacemente nei progetti aziendali.

Corsi Windows Forms Aggiornati con Innovaformazione

Innovaformazione.net offre corsi Windows Forms specificamente aggiornati per .NET 10, progettati per sviluppatori junior e senior. I nostri corsi coprono:

  • Migrazione a .NET 10: strategie e best practices
  • Nuove API asincrone: InvokeAsync, ShowDialogAsync e pattern moderni
  • Dark Mode implementation: design systems e theming completo
  • Sicurezza e privacy: Screen Capture Mode e protezione dati
  • AI-Assisted Development: GitHub Copilot per Windows Forms
  • Performance optimization: tecniche avanzate e profiling

Vantaggi dei Nostri Corsi

Calendario personalizzabile: organizziamo le sessioni in base alle vostre esigenze aziendali
Modalità online in classe virtuale: formazione interattiva senza necessità di trasferte
Accesso a Fondimpresa: possibilità di formazione aziendale gratuita tramite fondi interprofessionali
Docenti senior e certificati: esperti Microsoft con esperienza reale su progetti enterprise
Materiale didattico completo: esempi di codice, best practices e progetti pratici

Richiedi un Preventivo Personalizzato

Per informazioni dettagliate sui nostri corsi Windows Forms e per richiedere un preventivo personalizzato per la tua azienda:

Email: info@innovaformazione.net
Telefono: 3471012275 (Dario Carrassi)

Visualizza l’elenco Corsi Microsoft .net per aziende.

Investire nella formazione dei propri sviluppatori significa investire nella qualità del software prodotto, nella velocità di delivery e nella soddisfazione del team. Non perdere l’opportunità di portare le competenze del tuo team al livello successivo con le novità di Windows Forms in .NET 10.

Per altri articoli tecnici consigliamo di navigare sul nostro blog QUI.

(fonte) (fonte) (fonte)

Vuoi essere ricontattato? Lasciaci il tuo numero telefonico e la tua email, ti richiameremo nelle 24h:

    Ti potrebbe interessare

    Articoli correlati