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

Kha*_*aB7 4 c# datetimepicker winforms

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

Han*_*ant 11

本机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);
}
Run Code Online (Sandbox Code Playgroud)

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

在此输入图像描述