在.NET中更改DateTimePicker的背景颜色
在.NET
(至少在2008版本中,也可能在2005年),更改DateTimePicker
的BackColor
属性绝对不会影响外观。 如何更改文本区域的背景颜色,而不是下拉日历的背景颜色?
编辑:我说的是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有限