使用datetimepicker时,有时用户不会做任何更改并关闭datetimepicker。 关闭datetimepicker后,我的程序会检查日期是否适合其余数据。如果datetimepicker被转义关闭或点击其他地方,我想阻止这种检查。
是否可以在不选择日期的情况下检测datetimepicker是否已关闭?
我使用特写属性和EventArgs。
答案 0 :(得分:1)
我认为这里的问题是,即使用户只是浏览日历,ValueChanged事件也会触发。我没有看到一个非常明显的方式处理它。但是,以下代码将在忽略DropDown和CloseUp事件之间的值更改事件方面做得不错。
bool UserIsJustLooking = false;
private void dateTimePicker1_DropDown(object sender, EventArgs e)
{
UserIsJustLooking = true;
dateTimePicker1.Tag = dateTimePicker1.Value;
}
private void dateTimePicker1_ValueChanged(object sender, EventArgs e)
{
if (UserIsJustLooking)
{
// the user is just browsing the dates (ignore these value changed events because they aren't real)
}
else
{
Console.WriteLine("The value changed without opening, new value is " + dateTimePicker1.Value.ToString());
}
}
private void dateTimePicker1_CloseUp(object sender, EventArgs e)
{
UserIsJustLooking = false;
if ((DateTime)dateTimePicker1.Tag == dateTimePicker1.Value)
{
// User did not really change the value
}
else
{
Console.WriteLine("User selected a new value: " + dateTimePicker1.Value);
}
}
答案 1 :(得分:0)
您可以使用内置验证方法:
private void DateTimePicker_Validating(object sender, CancelEventArgs e)
{
//validation logic
//if valid
e.Cancel = false;
//else
e.Cancel = true;
}
将CancelEventArgs.Cancel
设置为true将阻止控件失去焦点。
您需要将此附加到DateTimePicker 验证事件
答案 2 :(得分:0)
大卫的光照,因为我无法解决问题
if ((DateTime)dateTimePicker1.Tag == dateTimePicker1.Value)
我创建了另一个版本。
在公开的部分课程中,我添加了这些
public bool EscPressed = false;
public string calTag = DateTime.Now.ToString("d");
我写了这个方法
private void cal_Close(object sender, EventArgs e)
{
EscPressed = false;
if (calTag == cal.Value.ToString("d"))
EscPressed = true;
else
EscPressed = false;
cal.Visible = false;
if (EscPressed)
return;
calTag = cal.Value.ToString("d");
_textBox[1].Text = _textBox1[1].Text = calTag;
CheckDate();
}
PS:Checkdate()是一种检查日期是否选好的方法