【发布时间】:2010-02-23 04:08:47
【问题描述】:
在我的项目中有一个UserControl,它包含一个NumericUpDown ctrl,它的有效值范围是从10到100,
所以如果用户在 NumericUpDown ctrl 中输入 200,那么在焦点切换到其他 ctrl 后它的值会自动变为 100,这对客户来说看起来有点好奇,因为他们可能会在 NumericUpDown 中输入 200 后点击 OK 按钮ctrl,他们需要一个消息框,告诉他们输入的值不在范围内。
但问题是,如果输入的值超出其范围,则 NumericUpDown 的值会在焦点更改后自动更改。
那么如何实现呢?
Sameh Serag,这是我测试过的代码。我在表单上添加了一个按钮,但什么也没做。我的结果是在我输入 200 并单击按钮后,只显示一个值为 100 的消息框。在我输入 200 并按下 tab 键后,它只会显示一个值为 200 的消息框,并且 NumericUpDown 中的文本值更改为 100。很好奇 :-) 无论如何非常感谢您的帮助!顺便说一句,.Net 框架版本是 2.0 和 sp2 对我来说。
public partial class Form1 : Form
{
private TextBox txt;
public Form1()
{
InitializeComponent();
txt = (TextBox)numericUpDown1.Controls[1];
txt.Validating += new CancelEventHandler(txt_Validating);
}
void txt_Validating(object sender, CancelEventArgs e)
{
MessageBox.Show(txt.Text);
}
}
【问题讨论】:
-
我不相信这是可能的,但是 +1 因为我过去也遇到过这个问题。我最终切换回普通的旧文本框。
-
+1 给马特。 NumericUpDown 控件是有史以来最恶心的控件。我从未观察到用户实际点击这些小按钮或使用箭头键。他们只是打字。如果您使用的是平板电脑,上帝会帮助您。
-
@Carlos_Liu:在您修改问题后,我在下面更新了我的答案。顺便说一句:它在你上面描述的所有场景中都对我有用。试试看,让我们知道结果;-)
-
不要在问题正文中对特定用户发表评论