关闭datetimepicker时检查按下的键

时间:2017-06-16 17:23:39

标签: c# datetimepicker

使用datetimepicker时,有时用户不会做任何更改并关闭datetimepicker。 关闭datetimepicker后,我的程序会检查日期是否适合其余数据。如果datetimepicker被转义关闭或点击其他地方,我想阻止这种检查。

是否可以在不选择日期的情况下检测datetimepicker是否已关闭?

我使用特写属性和EventArgs。

3 个答案:

答案 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()是一种检查日期是否选好的方法