共用方式為


步驟 5:加入 NumericUpDown 控制項的 Enter 事件處理常式

您可能已注意到在 NumericUpDown 控制項中輸入數字時,出現很異常的情形。 為了解決此情形,您要加入 Enter 事件處理常式。

若要查看 NumericUpDown 控制項行為

  1. 執行程式並啟動遊戲。 總和 NumericUpDown 控制項在 [0] (零) 旁應該會有閃爍的游標。

  2. 輸入 3 會出現 [30]。 輸入 5 會出現 [350],而經過一秒後會變成 [100]。

    在解決此問題之前,請先思考到底發生什麼事。 思考當您輸入 3 時,[0] 為何沒有消失。思考 [350] 為何變成 [100],以及變更之前為何會有延遲。

    注意事項注意事項

    雖然這個行為看似異常,但可以解釋。當您按一下 [開始] 按鈕時,按鈕的 [Enabled] 屬性會設定為 [False],所以按鈕會呈現灰色且無法使用。程式會尋找下一個最低 TabIndex 值的控制項,即總和 NumericUpDown 控制項,然後將焦點切換至該控制項。當您使用 TAB 鍵移至 NumericUpDown 控制項時,它會自動將游標移至控制項開頭,這就是造成輸入的數字會從左輸入而非從右輸入的原因。當您輸入超過 [MaximumValue] 屬性 (設定為 100) 的數字時,它會以最大值取代輸入的值。

若要加入 NumericUpDown 控制項的 Enter 事件處理常式

  1. 若要避免這種異常行為並讓您的程式使用起來更方便,請針對每一個 NumericUpDown 控制項 Enter 事件加入事件處理常式。 使用 [屬性] 對話方塊中的 [事件] 頁面,針對總和 NumericUpDown 控制項加入稱為 [answer_Enter] 的 Enter 事件處理常式。

    屬性對話方塊

    [屬性] 對話方塊

    程式碼看起來應該如下所示。

    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);
        }
    }
    

    雖然一開始看似複雜,但如果您逐步查看,實際上很容易了解。 首先,查看方法的頂端:C# 中的 object sender 或 Visual Basic 中的 sender As System.Object。 這表示在您的方法內,每當您使用 sender 時,它就會參考引發 Enter 事件的 NumericUpDown 控制項。 因此,在方法的第一行中,您可以指定它不僅是物件,更是具體的 NumericUpDown 控制項 (每一個 NumericUpDown 控制項都是物件,但不是每一個物件都是 NumericUpDown 控制項)。 下一行驗證 answerBox 是否已成功從物件轉換 (轉型) 為 NumericUpDown 控制項。 如果失敗,則值為 null (C#) 或 Nothing (Visual Basic)。 第三行尋找 NumericUpDown 控制項中目前顯示之答案的長度。 第四行指示 NumericUpDown 控制項選取答案。 現在,當使用者瀏覽至控制項時,就會引發此事件,使得它選取答案。 當使用者開始輸入時,立即會清除上一個答案,並以新的答案取代。

  2. 此事件處理常式就緒之後,移至 [Windows Form 設計工具],然後選取差數 NumericUpDown 控制項。 移至 [屬性] 對話方塊中的 [事件] 頁面,向下捲動至 Enter 事件,然後選取您剛加入的事件處理常式。

  3. 接著,針對積數和商數 NumericUpDown 控制項執行相同的動作。

  4. 儲存並執行您的程式。 應該不會再發生異常的行為。

若要繼續或檢視