在.NET中更改DateTimePicker的背景颜色

.NET (至少在2008版本中,也可能在2005年),更改DateTimePickerBackColor属性绝对不会影响外观。 如何更改文本区域的背景颜色,而不是下拉日历的背景颜色?

编辑:我说的是Windows表单,而不是ASP。

根据MSDN :

设置BackColor不会影响DateTimePicker的外观。

您需要编写一个扩展DateTimePicker的自定义控件。 重写BackColor属性和WndProc方法。

每当你更改BackColor ,不要忘记调用myDTPicker.Invalidate()方法。 这将强制使用指定的新颜色重绘控件。

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

有一个从DateTimePicker派生的免费实现,它允许您在更改时更改BackColor属性。

请参阅CodeProject网站: 使用BackColor DateTimePicker

对于文本区域,您可以在要添加扩展器的实际文本框上执行此操作
对于c#,你会这样做:

  

基于这个项目 (如上所述),我重写了一个自定义的datepicker类(在VB.NET中),它允许自定义背景颜色,TextColor和下拉按钮旁边出现的小图像。

Eg.1:

在此处输入图像描述

Eg.2:

在此处输入图像描述

要使其工作,只需使用以下代码在项目中创建一个新类并重建解决方案。 现在,名为MyDateTimePicker的新控件应出现在工具箱列表中:

 Public Class MyDateTimePicker Inherits System.Windows.Forms.DateTimePicker Private _disabled_back_color As Color Private _image As Image Private _text_color As Color = Color.Black Public Sub New() MyBase.New() Me.SetStyle(ControlStyles.UserPaint, True) _disabled_back_color = Color.FromKnownColor(KnownColor.Control) End Sub '''  ''' Gets or sets the background color of the control '''   Public Overrides Property BackColor() As Color Get Return MyBase.BackColor End Get Set MyBase.BackColor = Value End Set End Property '''  ''' Gets or sets the background color of the control when disabled '''    Public Property BackDisabledColor() As Color Get Return _disabled_back_color End Get Set _disabled_back_color = Value End Set End Property '''  ''' Gets or sets the Image next to the dropdownbutton '''   Public Property Image() As Image Get Return _image End Get Set(ByVal Value As Image) _image = Value Invalidate() End Set End Property '''  ''' Gets or sets the text color when calendar is not visible '''   Public Property TextColor As Color Get Return _text_color End Get Set(value As Color) _text_color = value End Set End Property Protected Overrides Sub OnPaint(e As System.Windows.Forms.PaintEventArgs) Dim g As Graphics = Me.CreateGraphics() g.TextRenderingHint = Drawing.Text.TextRenderingHint.ClearTypeGridFit 'Dropdownbutton rectangle Dim ddb_rect As New Rectangle(ClientRectangle.Width - 17, 0, 17, ClientRectangle.Height) 'Background brush Dim bb As Brush Dim visual_state As ComboBoxState 'When enabled the brush is set to Backcolor, 'otherwise to color stored in _disabled_back_Color If Me.Enabled Then bb = New SolidBrush(Me.BackColor) visual_state = ComboBoxState.Normal Else bb = New SolidBrush(Me._disabled_back_color) visual_state = ComboBoxState.Disabled End If 'Filling the background g.FillRectangle(bb, 0, 0, ClientRectangle.Width, ClientRectangle.Height) 'Drawing the datetime text g.DrawString(Me.Text, Me.Font, New SolidBrush(TextColor), 5, 2) 'Drawing icon If Not _image Is Nothing Then Dim im_rect As New Rectangle(ClientRectangle.Width - 40, 4, ClientRectangle.Height - 8, ClientRectangle.Height - 8) g.DrawImage(_image, im_rect) End If 'Drawing the dropdownbutton using ComboBoxRenderer ComboBoxRenderer.DrawDropDownButton(g, ddb_rect, visual_state) g.Dispose() bb.Dispose() End Sub End Class 

*请注意,此类已简化,因此function有限