5

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

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

4

1 回答 1

5

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

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

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

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

但是,您可以通过强制再次关闭下拉日历来绕过它。为此,P/InvokeSendMessage函数并向控件发送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。只需使用常规组合框或下拉按钮,然后您可以在单击时显示您想要的任何形式。

于 2013-04-12T06:08:01.993 回答