Condividi tramite


Passaggio 5: aggiungere gestori di eventi Enter per i controlli NumericUpDown

Probabilmente si è notato un comportamento insolito riguardo alla digitazione di numeri nel controllo NumericUpDown.Per correggere questo comportamento, si aggiunge un gestore dell'evento Enter.

Per visualizzare il comportamento del controllo NumericUpDown

  1. Eseguire il programma e avviare il gioco.All'interno del controllo NumericUpDown della somma è presente un cursore lampeggiante accanto a 0 (zero).

  2. Digitare 3. Verrà visualizzato 30.Digitare 5. Verrà visualizzato 350, ma dopo un secondo il numero viene modificato in 100.

    Prima di correggere il problema, esaminare questo comportamento.Considerare perché lo 0 non è scomparso quando si è digitato 3. Considerare perché 350 è stato modificato in 100 e perché c'è stato un ritardo prima della modifica.

    [!NOTA]

    Sebbene questo comportamento possa sembrare strano, esiste una spiegazione.Quando si fa clic sul pulsante Avvia, la proprietà Enabled del pulsante viene impostata su False e il pulsante viene visualizzato in grigio e non è disponibile.Il programma cerca il controllo con il valore TabIndex successivo più basso, il controllo NumericUpDown della somma, e imposta lo stato attivo su tale controllo.Quando si utilizza il tasto TAB per passare a un controllo NumericUpDown, il cursore viene automaticamente posizionato all'inizio del controllo, il che provoca l'immissione da sinistra e non da destra dei numeri digitati.Quando si immette un numero superiore a quello della proprietà MaximumValue, impostata su 100, il numero immesso viene sostituito con il valore massimo.

Per aggiungere un gestore dell'evento Enter per il controllo NumericUpDown

  1. Per impedire questo comportamento insolito e rendere il programma più facile da utilizzare, aggiungere un gestore dell'evento per ogni evento Enter del controllo NumericUpDown.Utilizzare la pagina Eventi nella finestra di dialogo Proprietà per aggiungere un gestore dell'evento Enter per il controllo NumericUpDown della somma denominato answer_Enter.

    Finestra di dialogo Proprietà

    Finestra di dialogo Proprietà

    Il codice dovrebbe essere analogo al seguente.

    Private Sub answer_Enter(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles sum.Enter
    
        ' Select the whole answer in the NumericUpDown control.
        Dim answerBox = TryCast(sender, NumericUpDown)
    
        If answerBox IsNot Nothing Then
            Dim lengthOfAnswer = answerBox.Value.ToString().Length
            answerBox.Select(0, lengthOfAnswer)
        End If
    
    End Sub
    
    private void answer_Enter(object sender, EventArgs e)
    {
        // Select the whole answer in the NumericUpDown control.
        NumericUpDown answerBox = sender as NumericUpDown;
    
        if (answerBox != null)
        {
            int lengthOfAnswer = answerBox.Value.ToString().Length;
            answerBox.Select(0, lengthOfAnswer);
        }
    }
    

    Sebbene possa sembrare complesso inizialmente, è più facile da capire se lo si analizza passaggio per passaggio.Innanzitutto, osservare l'inizio del metodo: object sender in C# o sender As System.Object in Visual Basic.Ciò vuol dire che all'interno del metodo, ogni volta che si utilizza sender si fa riferimento al controllo NumericUpDown il cui evento Enter sta per essere generato.Quindi, nella prima riga del metodo si specifica che non si tratta solo di un oggetto, ma in maniera specifica di un controllo NumericUpDown.Tenere presente che ogni controllo NumericUpDown è un oggetto, ma non tutti gli oggetti sono controlli NumericUpDown. La riga successiva verifica se answerBox è stato convertito (cast) correttamente da un oggetto in un controllo NumericUpDown.Se l'operazione non è riuscita, dispone del valore null (C#) o Nothing (Visual Basic).La terza riga trova la lunghezza della risposta attualmente visualizzata nel controllo NumericUpDown.La quarta riga indica al controllo NumericUpDown di selezionare la risposta.Quando ora l'utente si sposta nel controllo, viene generato questo evento che provoca la selezione della risposta.Appena l'utente inizia a digitare, la risposta precedente viene cancellata e viene sostituita con la nuova risposta.

  2. Dopo aver implementato questo gestore dell'evento, andare a Progettazione Windows Form e selezionare il controllo NumericUpDown della differenza.Andare alla pagina Eventi nella finestra di dialogo Proprietà, scorrere verso il basso fino all'evento Enter e selezionare il gestore dell'evento appena aggiunto.

  3. Eseguire quindi la stessa operazione per il controllo NumericUpDown del prodotto e del quoziente.

  4. Salvare ed eseguire il programma.Il comportamento insolito non dovrebbe più verificarsi.

Per continuare o rivedere l'esercitazione