【问题标题】:How not to show calendar in the DateTimePicker when user clicks DropDown button用户单击下拉按钮时如何在 DateTimePicker 中不显示日历
【发布时间】:2013-04-12 05:48:37
【问题描述】:

DateTimePicker 中,当用户单击DropDown 按钮时,会显示一个日历。我不想在 DropDown 事件中显示日历。

有没有办法覆盖这个事件并在用户点击下拉按钮时显示自定义表单??

【问题讨论】:

  • 欢迎来到 Stackoverflow。您是否尝试过任何方法来解决您的问题?展示你的努力。请阅读FAQHow to Ask

标签: c# winforms


【解决方案1】:

我不想在 DropDown 事件中显示日历。

您可以通过将控件的ShowUpDown property 设置为true 来阻止显示日历。代替下拉日历,它将在 DateTimePIcker 控件的一侧显示一个旋转按钮,允许用户选择所需的日期/时间。

有没有办法覆盖这个事件并在用户点击下拉按钮时显示自定义表单??

嗯,是的,我想是的。您可以处理DropDown event,它在控件显示下拉日历时被引发。在这个事件处理程序中,您可以显示您想要的任何形式。唯一的问题是下拉日历仍将正常显示。我不知道你如何防止这种情况发生。

但是,您可以通过强制再次关闭下拉日历来绕过它。为此,请 P/Invoke SendMessage function 并将控件发送到 DTM_CLOSEMONTHCAL message

[DllImport("user32.dll", CharSet = CharSet.Auto)]
private static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);

private const uint DTM_FIRST         = 0x1000;
private const uint DTM_CLOSEMONTHCAL = DTM_FIRST + 13; 

public static void CloseCalendar(this DateTimePicker dtp)
{
    SendMessage(dtp.Handle, DTM_CLOSEMONTHCAL, IntPtr.Zero, IntPtr.Zero);
}

但我无法想象你想要这样做的原因。如果您不需要日历或旋转按钮控件,则不需要 DateTimePicker。只需使用常规的组合框或下拉按钮,然后您可以在单击时显示任何您想要的形式。

【讨论】:

  • the drop-down calendar is still going to be shown as normal. I don't know how you prevent that from happening. 一个非常肮脏的方法是在日历下拉按钮的顶部放置一个按钮......嘿,快!
  • 太脏了,它并不总是有效。如果 DateTimePicker 控件具有焦点(它需要用户使用它,嗯,使用它),然后F4 将下拉日历。
  • 它应该很有趣,请抑制 F4 按键。实际上,有时您需要这样做:stackoverflow.com/questions/10526118/…
  • 感谢您的回复。但是单击下拉按钮后仍然会出现日历。这个 hack 的原因我对当前的 DateTimePicker 控件不满意。我正在尝试在 DateTimePicker 而不是标准日历下打开我的自定义表单。我可以创建自己的 UserControl 并将按钮放在顶部日历按钮上,但这是肮脏的方式
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-19
  • 1970-01-01
相关资源
最近更新 更多