繁体   English   中英

当用户单击DropDown按钮时,如何不在DateTimePicker中显示日历

[英]How not to show calendar in the DateTimePicker when user clicks DropDown button

DateTimePicker当用户单击DropDown按钮时,将显示日历。 我不想在DropDown事件上显示日历。

是否有某种方法可以覆盖此事件并在用户单击DropDown按钮时显示自定义表单?

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

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

是否有某种方法可以覆盖此事件并在用户单击DropDown按钮时显示自定义表单?

嗯,是的,我想是的。 您可以处理DropDown事件 ,当控件显示下拉日历时会引发该事件 在此事件处理程序中,您可以显示所需的任何表单。 唯一的问题是下拉日历仍然会正常显示。 我不知道你是如何防止这种情况发生的。

但是,您可以通过强制再次关闭下拉日历来破解它。 为此,P / Invoke SendMessage函数并向控件发送DTM_CLOSEMONTHCAL消息

[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。 只需使用常规组合框或下拉按钮,即可在单击时显示所需的任何表单。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM