插入数字12时未触发Datetimepicker Value Changed事件

时间:2014-12-22 07:12:46

标签: c# winforms datetimepicker

我在Win-Forms计划中遇到了问题。我在我的DateTimePicker中添加了一个Value-Changed事件,如下所示:

    private void dateTimePicker1_ValueChanged(object sender, EventArgs e)
    {
        SendKeys.Send("{Right}");
    }

出于某种原因,当插入数字12时,无论是在day字段还是在month字段中,都会交替触发事件。我尝试了很多其他数字,但它们都完美无缺。对于谁可能发现它相关,日期格式是dd / MM / yyyy。这是一个众所周知的问题吗?

编辑: 为了清楚起见,所有数字从1到31(当然除了12,当然)在白天发射它,以及月球场中1-11的所有数字

2 个答案:

答案 0 :(得分:1)

我不太关心这种行为的原因,你没有足够好地记录这个问题来猜测一个准确的答案。 DateTimePicker是一个“棘手”的控件,试图破解它几乎不是一个错误。微软很多,它在Windows中的两个高度可见位置使用,在安装时让用户校准时钟和任务栏上的时钟小部件。强烈的外观和感觉。你没有提到你的Windows版本。

但是你的方法中最明显的缺陷是你永远不会让它变得可靠。 ValueChanged事件当然只会在实际更改日期时触发。如果没有,因为用户输入的日期或月份已经与Value属性匹配,那么您将无法获得该事件。所以一个简单的解释是你把它初始化到12月12日。你没有提到初始值。

您无法做任何事情来避免此问题,DTP不支持“null”日期,以确保事件始终触发。没有“用户完成输入”事件。这里的建议是我的医生倾向于依赖的建议:如果它疼,那就不要这样做。如果这很痛,那就自己动手吧。

答案 1 :(得分:0)

根据您提供的信息,问题无法重现。可能你错过了什么。

在Winform上添加一个简单的Datetimepicker控件并更改其值会不断调用value changed事件。

见下图:

当日期更改为11时,文本框将更新为11

When date changed to 11 then textbox is updated to 11

在将日期更改为12时,文本框将更新为12

On changing the date to 12 the textbox is updated to 12

以下是更新文本框的代码

private void DateTimePicker1_ValueChanged(System.Object sender, System.EventArgs e)
{
    TextBox1.Text = DateTimePicker1.Value.Day.ToString;
}

您可以在应用程序中添加新表单并对其进行测试,我相信它会正常工作。然后,您可以尝试找出实际应用中出现的问题。