控制数字文本框的数值
控制数字文本框的数值
我有一个TextBox
,我希望它只能输入数字。因此,我在Google上搜索并找到了这篇stackoverflow帖子,它已经对我有很大帮助。但是,我希望现在只能输入数字的文本框在输入小于20的内容时显示一个警告。起初,我尝试使用OnTextInput
事件,但没有成功,然后我尝试在与数字相关的事件OnPreviewTextInput
中处理它。我在两个事件中都使用了相同的代码。
if (!char.IsDigit(e.Text, e.Text.Length - 1)) { var text = e.Text; int num; var success = int.TryParse(text, out num); if (!success) return; if (num <= 20) { if (MessageBox.Show("您确定要输入小于20的值吗?", "... 您确定吗?", MessageBoxButton.YesNo, MessageBoxImage.Exclamation) == MessageBoxResult.Yes) e.Handled = true; else { num++; textBox.Text = num.ToString(); } } e.Handled = true; }
问题出现的原因是没有正确处理控件的KeyDown事件。解决方法是在代码中添加正确的KeyDown事件处理程序来控制文本框的数字值。
代码中的txtNumeric_KeyDown方法是一个事件处理程序,用于处理文本框txtNumeric的KeyDown事件。在该方法中,首先通过char.IsDigit(e.KeyChar)判断按下的键是否是数字键,并将结果赋值给e.Handled。然后通过Int32.Parse(sender.Text)判断文本框中的值是否小于等于20,如果是,则弹出一个确认对话框,根据用户的选择来设置e.Handled的值或者更新文本框的值。
然而,由于代码中没有提供txtNumeric的定义和其他相关代码,我们无法确定具体的问题出现在哪里。如果按照代码的逻辑,问题可能出现在txtNumeric的KeyDown事件处理程序中。如果txtNumeric的KeyDown事件没有正确处理,那么无法正常控制文本框的数字值。
要解决这个问题,可以尝试在代码中添加正确的txtNumeric的KeyDown事件处理程序。可以参考上述代码中的txtNumeric_KeyDown方法来实现正确的处理逻辑。通过正确处理KeyDown事件,可以控制文本框的数字值并解决问题。
总结起来,问题的原因是没有正确处理控件的KeyDown事件,解决方法是在代码中添加正确的KeyDown事件处理程序来控制文本框的数字值。
问题的原因是在输入数字的文本框中,当输入的字符发生变化时,无法正确处理输入的数字值。解决方法是使用TextChanged事件处理程序来捕获文本框的变化,并进行筛选。
以下是一个示例实现的代码:
private void yourTextBox_TextChanged(object sender, EventArgs e) { if (!char.IsDigit(e.Text, e.Text.Length - 1)) { var text = e.Text; int num; var success = int.TryParse(text, out num); if (!success) return; if (num <= 20) { if ( MessageBox.Show("Are you sure you want to go underneath 20?", "... You sure?", MessageBoxButton.YesNo, MessageBoxImage.Exclamation) == MessageBoxResult.Yes) e.Handled = true; else { num++; textBox.Text = num.ToString(); } } e.Handled = true; } }
问题的提出者指出,当输入带有百分号的数字时,会导致只有百分号前的数字被处理,无法输入其他数字。建议首先检查文本框中的字符数量是否大于1,以解决这个问题。
另外,有人提出了使用特定的数字控件而不是文本框,并在验证控件或表单时检查数值的建议。还有人建议将输入视为数字而不是字符进行处理。
总之,通过使用TextChanged事件处理程序并进行适当的筛选,可以解决在控制数字输入的文本框中无法正确处理数字值的问题。