65.9K
CodeProject is changing. Read more.
Home

A simple solution for changing a DateTimerPicker background color

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.20/5 (2 votes)

Jul 29, 2011

CPOL
viewsIcon

20794

How to change the background color of a DateTimerPicker control.

This is an answer to a question in comments section of the following article (I can't otherwise find a link to simply respond to that question): A DateTimePicker with working BackColor, by Vincenzo Rossi.

I wanted to come up with a simpler solution that has no limitations. I hit the same problem and came to the same conclusions as in the original post. However I didn't like the limitations, namely that one couldn't directly edit the days/months/years in the control anymore. Then I found a great solution here: http://stackoverflow.com/questions/198532/changing-the-background-color-of-a-datetimepicker-in-net.

Basically, you create a control inheriting from DateTimePicker and add this override:

const int WM_ERASEBKGND = 0x14;
 
protected override void WndProc(ref System.Windows.Forms.Message m)
{
     if(m.Msg == WM_ERASEBKGND)
     {
       Graphics g = Graphics.FromHdc(m.WParam);
       g.FillRectangle(new SolidBrush(_backColor), ClientRectangle);
       g.Dispose();
       return;
     }
 
     base.WndProc(ref m);
}

(where _backColor is the color of your choice...)

If you want to change the color, simply call the Invalidate() method of your DateTimePicker after changing _backColor. To me, that works wonderful, without any limitations.