步骤 5:为 NumericUpDown 控件添加 Enter 事件处理程序

您可能已经注意到,在 NumericUpDown 控件中键入数字时有些古怪。为了解决此问题,您需要添加 Enter 事件处理程序。

查看 NumericUpDown 控件行为

  1. 运行程序并开始游戏。sum NumericUpDown 控件中的 0(零)旁边应有一个闪烁的光标。

  2. 键入 3,将出现 30。键入 5,将出现 350,但在一秒钟之后它将更改为 100

    在解决此问题之前,请先想想发生了什么事。想一想为什么在键入 3 之后 0 没有消失。再想一想为什么 350 更改为 100,以及在改变之前为什么会有延迟。

    说明说明

    尽管这种行为看起来古怪,但是可以解释得通。当单击“开始”按钮时,此按钮的“Enabled”属性将设置为“False”,并且此按钮显示为灰色且不可用。程序将查找下一个 TabIndex 值最小的控件(即 sum NumericUpDown 控件),并将焦点更改到此控件。当使用 Tab 键转到 NumericUpDown 控件时,系统会自动将光标定位到此控件的起始位置,这就是导致您键入的数字从左侧输入而非右侧输入的原因。当输入一个超过“MaximumValue”属性的数字时(此属性设置为 100),将用最大值替换输入的数字。

为 NumericUpDown 控件添加 Enter 事件处理程序

  1. 为了防止出现这种古怪的行为并使程序更易于使用,请为每个 NumericUpDown 控件的 Enter 事件添加事件处理程序。使用**“属性”对话框中的“事件”页,为称作“answer_Enter”**的 sum NumericUpDown 控件添加 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 窗体设计器”并选择其他 NumericUpDown 控件。转到**“属性”对话框中的“事件”**页,向下滚动到 Enter 事件,并选择您刚刚添加的事件处理程序。

  3. 然后,对 product 和 quotient NumericUpDown 控件执行同样的操作。

  4. 保存并运行程序。古怪行为应当不再发生。

继续或查看