如何从DateTimePicker控件(Windows窗体控件)中删除“今天”按钮

在DateTimePicker控件中,当我们单击下拉按钮时,将显示日历。 在日历的底部,有一个按钮:今天,在点击时,将当前日期设置为所选日期。 我想从控件中删除/隐藏该按钮。 我该怎么做?

本机Windows DateTimePicker控件支持DTM_SETMCSTYLE消息以设置月份日历的样式。 您只需要一个小的pinvoke来在创建控件时发送消息并更改默认样式。 在项目中添加一个新类并粘贴下面显示的代码。 编译。 将新控件从工具箱顶部拖放到表单上,替换旧控件。

using System; using System.Windows.Forms; using System.Runtime.InteropServices; class MyDateTimePicker : DateTimePicker { protected override void OnHandleCreated(EventArgs e) { int style = (int)SendMessage(this.Handle, DTM_GETMCSTYLE, IntPtr.Zero, IntPtr.Zero); style |= MCS_NOTODAY | MCS_NOTODAYCIRCLE; SendMessage(this.Handle, DTM_SETMCSTYLE, IntPtr.Zero, (IntPtr)style); base.OnHandleCreated(e); } //pinvoke: private const int DTM_FIRST = 0x1000; private const int DTM_SETMCSTYLE = DTM_FIRST + 11; private const int DTM_GETMCSTYLE = DTM_FIRST + 12; private const int MCS_NOTODAYCIRCLE = 0x0008; private const int MCS_NOTODAY = 0x0010; [DllImport("user32.dll")] private static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wp, IntPtr lp); } 

在运行时,它在Windows 7上看起来像这样:

在此处输入图像描述

我似乎记得想要在不久前修改这个控件,并发现它是不可能的。 解决方案是构建自己的自定义控件。

如果它有帮助,我确实发现这显示一个自定义日历下拉列表,其中包含派生的DateTimePicker类 , 该类链接到自定义的Winforms日历文化感知月份日历和DatePicker 。