Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

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 clicked , sets the present date as the selected date. I want to remove/hide that button from the control. How can I do it?

like image 728
KhannaB7 Avatar asked Dec 16 '22 23:12

KhannaB7


1 Answers

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

like image 51
Hans Passant Avatar answered Dec 28 '22 11:12

Hans Passant