Ну, обработайте 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;
}
Затем у меня есть DateTimePicker для поля DOB : я хочу убедиться, что значение, указанное в 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...");
}
}