How can I remove the “Today” button from DateTimePicker control (of Windows form Control)

前端 未结 2 1707
长发绾君心
长发绾君心 2020-12-15 14:35

In the DateTimePicker control, when we click the dropdown button , a calendar gets displayed . at the bottom of the calendar , there is a button : Today , which on being cli

2条回答
  •  甜味超标
    2020-12-15 15:10

    The native Windows DateTimePicker control supports the DTM_SETMCSTYLE message to set the style of the month calender. You just need a little pinvoke to send the message when the control is created and change the default style. Add a new class to your project and paste the code shown below. Compile. Drop the new control from the top of the toolbox onto your form, replacing the old one.

    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);
    }
    

    It looks like this at runtime, on Windows 7:

    enter image description here

提交回复
热议问题