在DateTimePicker控件中,当我们单击下拉按钮时,会显示一个日历。在日历的底部,有一个按钮:今天,在点击时,将当前日期设置为所选日期。 我想从控件中删除/隐藏该按钮。我该怎么办?
答案 0 :(得分:10)
本机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上看起来像这样:
答案 1 :(得分:0)
我似乎记得想要在不久前修改这个控件,并发现它是不可能的。解决方案是构建自己的自定义控件。
如果有帮助,我确实找到了这个Show a custom calendar dropdown with a derived DateTimePicker class,它链接到自定义的Winforms日历Culture Aware Month Calendar and DatePicker。