关闭日期时间选择器时检查按下的键

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() 是一种检查日期是否选择正确的方法