当用户点击DateTimePicker
按钮时,DropDown
会显示日历。我不想在DropDown事件上显示日历。
当用户点击DropDown按钮时,是否有某种方法可以覆盖此事件并显示自定义表单?
答案 0 :(得分:3)
我不想在DropDown活动上显示日历。
您可以通过将控件的ShowUpDown
property设置为true
来阻止显示日历。而不是下拉日历,它将显示一个旋转按钮到DateTimePIcker控件的一侧,允许用户选择所需的日期/时间。
当用户点击DropDown按钮时,是否有某种方法可以覆盖此事件并显示自定义表单?
嗯,是的,我想是的。您可以处理DropDown
event,当控件显示下拉日历时会引发该SendMessage
function。在此事件处理程序中,您可以显示所需的任何表单。唯一的问题是下拉日历仍然会正常显示。我不知道你是如何防止这种情况发生的。
但是,您可以通过强制再次关闭下拉日历来破解它。为此,请调用DTM_CLOSEMONTHCAL
message并将控件发送到{{3}}。
[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。只需使用常规组合框或下拉按钮,即可在单击时显示所需的任何形式。