Un piccolo progetto per spiegare come chiamare una form prima di aprire la finestra principale di un programma ovvero, la form di Login. E’ un progetto creato in risposta ad una domanda sul forum Microsoft italia, emersa dopo un errore di compilazione da parte di un neofita.
Il problema principale era nel come chiamare una form e poi da questa aprirne un altra.
Considerato che si trattava di una form di Login ho deciso di fare un piccolo progetto di esempio per mostrare qual’è il metodo più semplice per aprire una form di login e poi la finestra principale dell’applicazione. Ricordate che nel nostro lavoro, Keep it simple deve essere un mantra.
Vediamo cosa ho fatto:
Ho creato un progetto Windows Forms, perché chi ha fatto la domanda utilizza questa tecnologia. Ho rinominato Form1 MainWindow e poi ho creato una nuova form che ho chiamato FrmLogin.
La form di login è molto semplice, al suo interno ho messo una Label con la richiesta della password e una TextBox, ove inserire la password. Ho inserito anche il bottone OK per controllare la password.
Quali dati ho settato nelle proprietà della form e dei controlli:
- FrmLogin.Text = Login to application
- Label1.Text = Give me the password please
- TxtPassword.PasswordChar = *
- btnOK.Text = Ok
Ho inoltre implementato l’event handler del bottone btnOk:
private void btnOK_Click(object sender, EventArgs e) { if (txtPassword.Text == "12345") { DialogResult = DialogResult.OK; } else { DialogResult = DialogResult.Cancel; } }
Come vedete, il codice è semplicissimo, controllo il contenuto di txtPassword.Text, se vale 12345 è corretta, altrimenti è errata. La sola cosa che faccio è aggiornare la property DialogResult della Form che sarà inizializzata con il valore OK o il valore Cancel. Quando viene chiamata in modalità DIalog. una form si chiude al termine di questo metodo.
Il metodo che ha aperto la form potrà controllare il valore di ritorno e reagire di conseguenza.
Nel nostro caso, la form viene aperta dal metodo Main della classe Program.cs, vediamo quindi come è fatto:
[STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); FrmLogin login = new FrmLogin(); if (login.ShowDialog() == DialogResult.OK) { Application.Run(new MainWindow()); } else { MessageBox.Show("You must write the right password!"); } }
Questo è il Main dell’applicazione, come possiamo vedere, genera un oggetto FrmLogin e poi lo apre come finestra modale, utilizzando il metodo ShowDialog, questo significa che il programma si ferma e attende che la Form sia chiusa prima di proseguire.
ShowDialog, quando la finestra viene chiusa, restituisce il parametro DialogResult della form, pertanto testiamo il suo valore e nel caso sia OK apriamo la finestra principale del programma altrimenti diamo un messaggio ed usciamo dal programma.
Se la password è corretta, si apre la finestra MainWindow, ove, per non fare una semplice finestra vuota, ho creato un minuscolo codice, eseguito nell’evento Load della form che visualizza le variabili di ambiente che sono state inizializzate in windows:
private void MainWindow_Load(object sender, EventArgs e) { StringBuilder sb = new StringBuilder(); sb.AppendLine("The Environment in your computer is the following"); foreach (DictionaryEntry data in Environment.GetEnvironmentVariables()) { sb.AppendFormat("{0}: {1}", data.Key, data.Value); sb.AppendLine(); } txtInfo.Text = sb.ToString(); }
Il codice esempio è scaricabile qui:
Companion code, Login Before Opening Main Window
Per qualsiasi ulteriore domanda potete usare la form di contatto il cui link è sul menu a inizio pagina.