C# - DateTimePicker,检测上下点击事件

Posted

技术标签:

【中文标题】C# - DateTimePicker,检测上下点击事件【英文标题】:C# - DateTimePicker, detect up-down click events 【发布时间】:2012-10-18 17:58:19 【问题描述】:

我正在重新编写 C# DateTimePicker (nullable) 以满足我的需求,但我一直无法从挑选时间 (HH:mm, DateTimePicker.ShowUpDown = true) 开始检测上下事件。

我知道OnValueChanged 在按下向上或向下按钮时会被触发,但我已经在那里进行了一些处理(当在 DateTimePicker 中输入数字时自动移动到下一个字段),因此当按下这些按钮时,我需要阻止 ValueChanged 事件,并在不同的函数中处理它。

我试图重写 WndProc 函数,但 OnValueChanged 在 WndProc 之前被调用。 OnKeyDown 也是在 OnValueChanged 之后调用的。

有什么想法吗?

【问题讨论】:

【参考方案1】:

您可以尝试覆盖OnDropDown,只要请求下拉日历,就会发生这种情况。

【讨论】:

如前所述,我使用 ShowUpDown 而不是日历。【参考方案2】:

DateTimePicker 的值更改时,您不应阻止ValueChanged 事件。 Up Down 按钮用于更改DateTimePicker 的值,因此按下它们应该会引发ValueChanged 事件。

考虑更改您当前对此事件的处理方式。

顺便说一句为什么当值改变时导航到下一个字段?只需为您的控件分配适当的TabIndex 值并允许用户使用Tab 按钮导航到下一个字段。这是一种常用的导航方法。

【讨论】:

我必须用 dd.MM.yyyy 控制一个,用 HH:mm 控制另一个。进入天数后,想把控件移到MM部分。 TabIndex 用于控件,而不是我所知道的 DateTimePicker 内部。 @user1782815 在 DateTimePicker 中左右方向键用于导航 是的,我知道这一点,但用户在输入日期或时间的一部分后没有必要使用箭头导航。我通过在 UpDown 按钮上方放置一个面板来解决此问题,因为我不需要此功能(因为用户可以在控件内使用箭头键)。 用户可以在控件内部使用箭头键,并不意味着他应该使用箭头键。喜欢使用鼠标的用户呢? 好点子,看来我必须在顶部创建自己的按钮(虽然这样做看起来很愚蠢,但我需要将 ValueChanged 和按钮点击分开)。

以上是关于C# - DateTimePicker,检测上下点击事件的主要内容,如果未能解决你的问题,请参考以下文章

C# 公共控件之 dateTimePicker

OroPlatform:如何覆盖 datetimepicker js 小部件

MySQL,PHP;检测 dateTimePicker 日期是不是已被使用并禁用它

关于c# visual studio 2005 关于datetimepicker,日期问题

C#中将dateTimePicker初始值设置为空

C# DateTimePicker控件如何精确设置显示时分秒