关闭日期时间选择器时检查按下的键
checking the pressed key when closing datetimepicker
使用日期时间选择器时,有时用户不做任何更改并关闭日期时间选择器。
关闭日期时间选择器后,我的程序会检查日期是否适合其余数据。我想阻止检查 datetimepicker 是否通过转义或单击其他地方关闭。
是否可以检测 datetimepicker 是否在未选择日期的情况下关闭?
我用特写属性和EventArgs.
您可以使用内置验证方法:
private void DateTimePicker_Validating(object sender, CancelEventArgs e)
{
//validation logic
//if valid
e.Cancel = false;
//else
e.Cancel = true;
}
将 CancelEventArgs.Cancel
设置为 true 将防止控件失去焦点。
您需要将此附加到您的 DateTimePicker 验证 事件
我认为这里的问题是,即使用户只是浏览日历,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);
}
}
经过 David 的启发,我无法解决
的问题
if ((DateTime)dateTimePicker1.Tag == dateTimePicker1.Value)
我创建了另一个版本。
在public部分class我添加了这些
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() 是一种检查日期是否选择正确的方法
使用日期时间选择器时,有时用户不做任何更改并关闭日期时间选择器。 关闭日期时间选择器后,我的程序会检查日期是否适合其余数据。我想阻止检查 datetimepicker 是否通过转义或单击其他地方关闭。
是否可以检测 datetimepicker 是否在未选择日期的情况下关闭?
我用特写属性和EventArgs.
您可以使用内置验证方法:
private void DateTimePicker_Validating(object sender, CancelEventArgs e)
{
//validation logic
//if valid
e.Cancel = false;
//else
e.Cancel = true;
}
将 CancelEventArgs.Cancel
设置为 true 将防止控件失去焦点。
您需要将此附加到您的 DateTimePicker 验证 事件
我认为这里的问题是,即使用户只是浏览日历,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);
}
}
经过 David 的启发,我无法解决
的问题if ((DateTime)dateTimePicker1.Tag == dateTimePicker1.Value)
我创建了另一个版本。
在public部分class我添加了这些
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() 是一种检查日期是否选择正确的方法