步驟 5:加入 NumericUpDown 控制項的 Enter 事件處理常式
您可能已注意到在 NumericUpDown 控制項中輸入數字時,出現很異常的情形。 為了解決此情形,您要加入 Enter 事件處理常式。
若要查看 NumericUpDown 控制項行為
執行程式並啟動遊戲。 總和 NumericUpDown 控制項在 [0] (零) 旁應該會有閃爍的游標。
輸入 3 會出現 [30]。 輸入 5 會出現 [350],而經過一秒後會變成 [100]。
在解決此問題之前,請先思考到底發生什麼事。 思考當您輸入 3 時,[0] 為何沒有消失。思考 [350] 為何變成 [100],以及變更之前為何會有延遲。
注意事項 雖然這個行為看似異常,但可以解釋。當您按一下 [開始] 按鈕時,按鈕的 [Enabled] 屬性會設定為 [False],所以按鈕會呈現灰色且無法使用。程式會尋找下一個最低 TabIndex 值的控制項,即總和 NumericUpDown 控制項,然後將焦點切換至該控制項。當您使用 TAB 鍵移至 NumericUpDown 控制項時,它會自動將游標移至控制項開頭,這就是造成輸入的數字會從左輸入而非從右輸入的原因。當您輸入超過 [MaximumValue] 屬性 (設定為 100) 的數字時,它會以最大值取代輸入的值。
若要加入 NumericUpDown 控制項的 Enter 事件處理常式
若要避免這種異常行為並讓您的程式使用起來更方便,請針對每一個 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 控制項選取答案。 現在,當使用者瀏覽至控制項時,就會引發此事件,使得它選取答案。 當使用者開始輸入時,立即會清除上一個答案,並以新的答案取代。
此事件處理常式就緒之後,移至 [Windows Form 設計工具],然後選取差數 NumericUpDown 控制項。 移至 [屬性] 對話方塊中的 [事件] 頁面,向下捲動至 Enter 事件,然後選取您剛加入的事件處理常式。
接著,針對積數和商數 NumericUpDown 控制項執行相同的動作。
儲存並執行您的程式。 應該不會再發生異常的行為。
若要繼續或檢視
若要移到下一個教學課程步驟,請參閱步驟 6:加入減法問題。
若要回到上一個教學課程步驟,請參閱步驟 4:加入 CheckTheAnswer() 方法。