Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

WinForms Modal e Modeless

WinForms: impariamo a gestire eventi dei pulsanti e a creare finestre in modo modale e non modale nel contesto dei form
WinForms: impariamo a gestire eventi dei pulsanti e a creare finestre in modo modale e non modale nel contesto dei form
Link copiato negli appunti

WinForms. Se parliamo di questi ultimi, in una tecnologia chiamata "Windows Forms", il "form" svolge chiaramente un ruolo fondamentale. In questa lezione esploreremo i concetti di base dei Windows Forms e ci soffermeremo sulle loro due modalità d'uso: modal e modeless.

Modalità Modal e Modeless dei form

Qualsiasi form, che deriva dalla classe base Form, può essere adoperato in due modalità distinte. Nello specifico in modal e modeless.

Modeless

Nella modalità modeless, il form si apre senza impedire l'esecuzione delle altre operazioni dell'applicazione. Questo consente agli utenti di interagire con il form aperto. Mentre l'applicazione prosegue con altre attività in background.L'utilizzo di un form in modalità modeless risulta spesso conveniente quando si intende offrire agli utenti la possibilità di esplorare o interagire con diverse parti dell'applicazione. Simultaneamente. Questa modalità può essere particolarmente appropriata per finestre o dialoghi che forniscono informazioni supplementari o opzioni aggiuntive.

Nella modalità modal, invece, l'apertura del form impedisce temporaneamente l'esecuzione di altre operazioni dell'applicazione, fino a quando il form non viene chiuso. Questo approccio guida l'attenzione dell'utente su una specifica operazione o richiesta. Richiedendo una risposta o un'azione prima di proseguire.

L'utilizzo di un form modale è preferibile quando si desidera focalizzare l'interazione dell'utente su un compito critico o una decisione importante. Questa modalità può essere particolarmente adatta per finestre o dialoghi che richiedono una risposta immediata o un'attenzione dedicata prima di procedere con altre attività dell'applicazione.

Scegliere tra Modal e Modeless

In generale, la decisione tra le due modalità dipende dagli obiettivi dell'interazione utente e dal flusso dell'applicazione. Entrambe le modalità presentano vantaggi specifici, e la scelta è guidata dalla progettazione dell'esperienza utente desiderata.

In questo frammento di codice, stiamo gestendo l'evento di click su un pulsante in un'applicazione Windows Form. Quello che vogliamo ottenere è spiegare in che modo creare e visualizzare una nuova finestra in modo modeless o "non modale", quando il pulsante viene cliccato.

Sub button1_Click(sender As Object, e As EventArgs)
  Dim myform As AnotherForm = New AnotherForm()
  myform.Show() ' Show form modelessly
End Sub

Per prima cosa vediamo che abbiamo una subroutine denominata button1_Click, che è associata all'evento di click del pulsante. Questa routine si attiverà ogni volta che l'utente farà click sul pulsante corrispondente nell'interfaccia utente.

Successivamente dichiariamo una variabile myform di tipo AnotherForm. Supponiamo che AnotherForm sia il nome di una classe di finestre che abbiamo precedentemente definito. Una volta creata l'istanza di AnotherForm, utilizziamo il metodo Show() su myform per visualizzare la finestra in modo non modale. Questo significa che la finestra appena creata può essere aperta senza bloccare il flusso di esecuzione del resto del programma. L'utente può interagire con la nuova finestra, mentre il codice continua a eseguire altre istruzioni.

Un altro esempio modeless è fornito nel frammento di codice sottostante, dove abbiamo una subroutine denominata btnSaluta_Click che è associata all'evento di click del pulsante denominato btnSaluta. Questo significa che il codice all'interno di questa subroutine verrà eseguito ogni volta che l'utente farà click sul pulsante "Saluta" nell'interfaccia utente.

Private Sub btnSaluta_Click(sender As Object, e As EventArgs) Handles btnSaluta.Click
    Dim nome As String = txtSaluto.Text
    MessageBox.Show($"Ciao, {nome}!")
End Sub

Dentro la subroutine, stiamo dichiarando una variabile stringa chiamata nome e le stiamo assegnando il testo presente nella casella di testo txtSaluto. Utilizziamo quindi la funzione MessageBox.Show per visualizzare una finestra di messaggio che saluta l'utente utilizzando il nome inserito nella casella di testo. La stringa tra le parentesi graffe $"Ciao, {nome}!" è una stringa interpolata. Essa ci consente di incorporare il valore della variabile nome direttamente nella stringa di saluto.

Rendere il codice modal

In entrambi gli esempi vediamo che non c'è alcuna istruzione che rende la finestra modale. La finestra di messaggio creata con MessageBox.Show è una finestra di dialogo standard che è modal solo se esplicitamente specificato. Nella sua forma attuale, quindi, non blocca l'interazione con altre parti dell'applicazione. Gli utenti possono ancora interagire con il resto dell'applicazione mentre la finestra di messaggio è aperta.

Per rendere il codice modal possiamo utilizzare il metodo ShowDialog() invece di Show() per la nostra finestra di messaggio. Il metodo ShowDialog() mostra la finestra in modo modale, bloccando l'interazione con altre finestre finché la finestra modale non viene chiusa. Vediamo come modificare il codice:

Private Sub btnSaluta_Click(sender As Object, e As EventArgs) Handles btnSaluta.Click
    Dim nome As String = txtSaluto.Text
    Dim myform As AnotherForm = New AnotherForm()
    myform.ShowDialog()
End Sub

Per riassumere a grandi linee quanto appena mostrato, possiamo dire che il metodo Form.Show visualizza la nuova finestra in modo non modale e restituisce immediatamente il controllo senza stabilire alcuna relazione tra la finestra attualmente attiva e quella creata. Ciò significa che la finestra esistente può essere chiusa, lasciando la vecchia finestra aperta in background. D'altra parte, il metodo Form.ShowDialog visualizza la finestra in modo modale e non restituisce il controllo fino a quando la finestra appena creata non viene chiusa. La chiusura può avvenire sia mediante l'uso esplicito del metodo Close che impostando la proprietà DialogResult, che vedremo successivamente.

Relazioni form padre-figlio

La proprietà dei form padre-figlio è un concetto chiave nel design delle interfacce utente nelle applicazioni Windows Form. Quando un form è aperto come figlio di un altro, il form padre diventa il suo "proprietario". Questa relazione padre-figlio ha un impatto sul comportamento visuale e comportamentale delle finestre coinvolte.

Ad esempio, quando si utilizza il metodo ShowDialog per aprire un form figlio, il form padre diventa il proprietario logico del form figlio. Ciò significa che il form figlio viene visualizzato in primo piano rispetto al form padre e, se il form padre viene minimizzato o ripristinato, il form figlio seguirà il medesimo stato. Questo legame padre-figlio è particolarmente utile quando si tratta di gestire la navigazione tra le finestre e di mantenere un flusso logico nelle interazioni utente all'interno dell'applicazione. Inoltre, permette di modellare gerarchie di finestre che riflettono la struttura delle funzionalità dell'applicazione, contribuendo così a una user experience più coesa e intuitiva.

Conclusioni

In questa lezione abbiamo imparato come gestire gli eventi dei pulsanti, creare finestre in modo modale e non modale, e l'importanza della relazione padre-figlio nel contesto dei Windows Forms. Abbiamo inoltre compreso che il metodo Show e ShowDialog possono influenzare significativamente l'esperienza dell'utente, determinando se la finestra può essere aperta in modo indipendente o se deve essere gestita in modo modale, bloccando temporaneamente l'interazione con il resto dell'applicazione.

Ti consigliamo anche