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.