tutorial - windows forms c# visual studio 2017
Cambiar el color de fondo de DateTimePicker en.NET (4)
En .NET
(al menos en la versión 2008, y tal vez en 2005 también), cambiar la propiedad BackColor
de DateTimePicker
tiene ningún efecto sobre la apariencia. ¿Cómo cambio el color de fondo del área de texto, no del calendario desplegable?
Editar: estaba hablando de formularios de Windows, no de ASP.
para el área de texto, debería hacerlo en el cuadro de texto real al que está agregando el extensor en
para c # lo harías así:
<asp:TextBox runat="server" ID="txt" BackColor="Aqua" Text="Date"></asp:TextBox>
Hay una implementación gratuita derivada de DateTimePicker
que le permite cambiar la propiedad BackColor
en el cambio.
Consulte el sitio web de CodeProject: DateTimePicker
con BackColor
funcionamiento
De acuerdo con MSDN :
Establecer
BackColor
no tiene ningún efecto sobre la apariencia deDateTimePicker
.
Necesita escribir un control personalizado que extienda DateTimePicker
. Reemplace la propiedad BackColor
y el método WndProc
.
Cada vez que cambie BackColor
, no olvide llamar al método myDTPicker.Invalidate()
. Esto obligará al control a volver a dibujarse utilizando el nuevo color especificado.
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);
}
Basado en este proyecto (como se publicó anteriormente), reescribí una clase de marcador de fecha personalizada (en VB.NET) que permite personalizar el color de fondo, el TextColor y la pequeña imagen que aparece junto al botón desplegable.
Eg.1:
Eg.2:
Para que funcione, cree una nueva clase en su proyecto con el siguiente código y vuelva a generar la solución. Un nuevo control llamado MyDateTimePicker ahora debería aparecer en la lista de la caja de herramientas:
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
'''''' <summary>
'''''' Gets or sets the background color of the control
'''''' </summary>
<Browsable(True)>
Public Overrides Property BackColor() As Color
Get
Return MyBase.BackColor
End Get
Set
MyBase.BackColor = Value
End Set
End Property
'''''' <summary>
'''''' Gets or sets the background color of the control when disabled
'''''' </summary>
<Category("Appearance"), Description("The background color of the component when disabled")>
<Browsable(True)>
Public Property BackDisabledColor() As Color
Get
Return _disabled_back_color
End Get
Set
_disabled_back_color = Value
End Set
End Property
'''''' <summary>
'''''' Gets or sets the Image next to the dropdownbutton
'''''' </summary>
<Category("Appearance"),
Description("Get or Set the small 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
'''''' <summary>
'''''' Gets or sets the text color when calendar is not visible
'''''' </summary>
<Category("Appearance")>
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
* Tenga en cuenta que esta clase se simplifica, por lo que tiene funciones limitadas