在DateTimePicker控件中,当我们点击下拉按钮时,会显示一个日历。在日历底部,有一个Today按钮,点击该按钮后,将当前日期设置为所选日期。
我想从控件中删除/隐藏该按钮。我该如何做?
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日历Culture Aware Month Calendar and DatePicker。