我目前有一个NumericUpDown,用户可以在其中输入他们在网站上的年限。
然后我有一个用于DOB字段的DateTimePicker:我想确保NumericUpDown中指定的值不大于DateTimePicker中指定的日期和当前日期之间的年差。
例如,用户在DateTimePicker中输入10th of january 2010
:然后他们不能在NumericUpDown中输入大于10
的数字(或者可以输入,但是会显示错误消息)。
我将如何去做?
使用此控件https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.datetimepicker.value
dateTime SelectedDate = dtp1.Value;
int SelectedLimit = nud1.Value;
if(SelectedDate.Year >= SelectedLimit)
//do something
else
//do something else
当然,现在的问题是,如何防止错误的设置,在何处连接更改事件等,所以agressiveöy。
我个人更喜欢通过INotifyDataErrorInfo和类似接口进行“被动”错误报告。显示一条消息,请勿尝试强制使用特定值。
您可以使用属性Maximum
设置NumericUpDown的最大值。
请参考以下代码。
public Form1()
{
InitializeComponent();
// When the DateTimePicker value has not changed
numericUpDown1.Maximum = DateTime.Now.Year - dateTimePicker1.Value.Year;
}
// When the DateTimePicker value has changed
private void dateTimePicker1_ValueChanged(object sender, EventArgs e)
{
numericUpDown1.Maximum = DateTime.Now.Year - dateTimePicker1.Value.Year;
}
如何挂钩日期时间选择器valuechanged事件并设置NUD的最大值?
private void DateTimePicker1_ValueChanged(Object sender, EventArgs e) {
numericUpDown1.Maximum = (DateTime.Now.Year - dateTimePicker1.Value.Year);
}
您的问题的标题与正文不同。一个说您要确保nud输入更大,另一个说not大。我的逻辑确保NUD中的输入不大,但是如果您要相反,请设置NUD最小值而不是最大值
DTP具有MaxDate和MinDate属性,这对于防止用户选择太过疯狂也很有用
好,处理DateTimePicker.ValueChanged
以设置NumericUpDown
控件的最大值:
private void dateTimePicker1_ValueChanged(object sender, EventArgs e)
{
numericUpDown1.Maximum = int.Parse(dateTimePicker1.Value.ToString("yy"));
}
如果NumericUpDown
显示年份部分的4位数字,则只需:
private void dateTimePicker1_ValueChanged(object sender, EventArgs e)
{
numericUpDown1.Maximum = dateTimePicker1.Value.Year;
}
然后我为DOB字段提供了一个DateTimePicker:我想确保NumericUpDown中指定的值不大于DateTimePicker中指定的日期和当前日期之间的年差。 >
然后获取年龄并将其分配给
Maximum
控件的NumericUpDown
属性:
private void dateTimePicker1_ValueChanged(object sender, EventArgs e) { var age = DateTime.Now.Year - dateTimePicker1.Value.Year; if (dateTimePicker1.Value > DateTime.Now.AddDays(-1)) age -= 1; numericUpDown1.Maximum = age; numericUpDown1.Value = age; }
如果您希望通知用户,则可以使用例如ErrorProvider组件。在这种情况下,请处理
ValueChanged
控件的NumericUpDown
事件:
//..
//Don't forget to EP.Dispose(); in the FormClosing event.
private readonly ErrorProvider EP = new ErrorProvider();
//..
private void numericUpDown1_ValueChanged(object sender, EventArgs e)
{
EP.Clear();
var age = DateTime.Now.Year - dateTimePicker1.Value.Year;
if (dateTimePicker1.Value > DateTime.Now.AddDays(-1))
age -= 1;
if (age < numericUpDown1.Value)
{
numericUpDown1.Value = age;
EP.SetError(numericUpDown1, "Incorrect age...");
}
}