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?
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:
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With