NumericUpDown
Questo controllo torna utile quando si vuole proporre all'utente una scelta di un numero, intero o decimale, compreso tra un minimo e un massimo. Ad esempio, il semplice programma che andrò a illustrare in questo capitolo chiede di indovinare un numero casuale da 0 a 100 generato dal computer. Con l'uso di una textbox, l'utente potrebbe commettere un errore di battitura e inserire in input caratteri non validi, mandando così in crash il programma: la soluzione potrebbe essere usare un Try, ma si sprecherebbe spazio, o un controllo Masked TextBox, ma in altri casi potrebbe risultare limitativo o pedante, dato che richiede un preciso numero di caratteri immessi. Usando invece una combobox o una listbox si dovrebbero aggiungere manualmente tutti i numeri con un for, sprecando spazio nel codice. La soluzione ideale sarebbe fare uso di NumericUpDown. Le proprietà caratteristiche:
- DecimalPlaces : i posti decimali dopo la virgola. Se impostata a 0, sarà possibile immettere solo numeri interi
- Hexadecimal : determina se visualizzare il numero in notazione esadecimale (solo per numeri interi positivi)
- Increment : il fattore di incremento/decremento automaticamente aggiunto/sottratto quando l'utente clicca sulle frecce del controllo
- InterceptArrowKey : determina se il controllo debba intercettare e interpretare la pressione delle frecce direzionali su/giù da testiera
- Maximum : massimo valore numerico
- Minimum : minimo valore numerico
- ThousandSeparator : indica se visualizzare il separatore delle migliaia
- Value : il valore indicato
- UpDownAlign : la posizione delle frecce sul controllo
Dopo aver posizionato questi controlli:
- Una Label Label1, Text = "Clicca Genera per generare un numero casuale, quindi prova a indovinare!"
- Un pulsante cmdGenerate, Text = "Genera"
- Un pulsante cmdTry, Text = "Prova"
- Un NumericUpDown nudValue, con le proprietà standard
- Una Label lblNumber, Text = "***", Font = Microsoft Sans Serif Grassetto 16pt, AutoSize = False, TextAlign = MiddleCenter
Disponeteli in modo simile a questo:
Ed ecco il codice:
Class Form1 'Il numero da indovinare Private Number As Byte 'Determina se l'utente ha già dato la sua risposta Private Tried As Boolean 'Crea un nuovo oggetto Random in grado di generare numeri 'casuali Dim Rnd As New Random() Private Sub cmdGenerate_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles cmdGenerate.Click 'Genera un numero aleatorio tra 0 e 99 e lo deposita in 'Number Number = Rnd.Next(0, 100) 'Imposta Tried su False Tried = False 'Nasconde la soluzione lblNumber.Text = "***" End Sub Private Sub cmdTry_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles cmdTry.Click 'Se si è già provato, esce dalla procedura If Tried Then MessageBox.Show("Hai già fatto un tentativo! Premi " & _ "Genera e prova con un altro numero!", "Numeri a caso", _ MessageBoxButtons.OK, MessageBoxIcon.Exclamation) Exit Sub End If 'Se NumericUpDown corrisponde al numero generato, 'l'utente vince If nudValue.Value = Number Then MessageBox.Show("Complimenti, hai vinto!", "Numeri a caso", _ MessageBoxButtons.OK, MessageBoxIcon.Information) Else MessageBox.Show("Risposta sbagliata!", "Numeri a caso", _ MessageBoxButtons.OK, MessageBoxIcon.Exclamation) End If 'Ormai l'utente ha fatto la sua scelta Tried = True 'Fa vedere la soluzione lblNumber.Text = Number End Sub End Class
DomainUpDown
Questo controllo è molto simile come stile grafico a quello appena analizzato solo che, anzichè visualizzare numeri in successione, visualizza semplici elementi testuali come le liste dei capitoli precedenti. È una specie di incrocio fra questi tipi di controllo: gode delle proprietà Minimum e Maximum, ma anche della proprietà Items, che stabilisce la lista ordinata di elementi da cui prelevare le stringhe.