.NET

2008-10-13 8 views
11

में .NET (कम से कम 2008 संस्करण में, और शायद 2005 में भी) में डेटटाइम पिकर के पृष्ठभूमि रंग को बदलना, की संपत्ति को बदलने से बिल्कुल उपस्थिति पर कोई प्रभाव नहीं पड़ता है। मैं ड्रॉप-डाउन कैलेंडर के नहीं, टेक्स्ट क्षेत्र का पृष्ठभूमि रंग कैसे बदलूं?.NET

संपादित करें: मैं विंडोज़ फॉर्मों के बारे में बात कर रहा था, एएसपी नहीं। आप इसे इस तरह करना होगा

उत्तर

14

अनुसार 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); 
} 
+0

क्षमा करें इसे स्वीकार करने में इतना समय लगा। मैं उम्मीद कर रहा था कि ऐसे अन्य समाधान थे जिनमें हेक्स मूल्यों को जानने में शामिल नहीं था, तो मैं इसके बारे में भूल गया। –

+0

इस पोस्ट के लिए धन्यवाद। मैं कस्टमटाइम एक डेटटाइम पिकर नियंत्रण कर रहा हूं और इससे मुझे सही दिशा में रखा गया है। –

+7

मैंने विस्टा के तहत इस बदलाव की कोशिश की (दृश्य शैलियों के साथ और बिना) और यह काम नहीं करता है। –

2

पाठ क्षेत्र के लिए आप के लिए होता है वास्तविक पाठ बॉक्स है कि आप सी # के लिए
पर एक्सटेंडर जोड़ रहे हैं पर यह कार्य करें:

<asp:TextBox runat="server" ID="txt" BackColor="Aqua" Text="Date"></asp:TextBox> 
+0

मैं माफी चाहता यह बहुत देर इस को पाने के लिए ले लिया हूँ सीमित है। मैंने सोचा कि मैंने पहले ही यह टिप्पणी जोड़ दी है। मैं विंडोज अनुप्रयोगों के बारे में बात कर रहा था, एएसपी अनुप्रयोग नहीं। –

3

एक नि: शुल्क कार्यान्वयन DateTimePicker से ली गई है कि आप परिवर्तन पर BackColor संपत्ति बदलने की अनुमति देता है। (ऊपर पोस्ट के रूप में) मैं एक कस्टम datepicker वर्ग (VB.NET में) फिर से लिख दिया जो पृष्ठभूमि रंग को अनुकूलित, textcolor और छोटे छवि प्रदर्शित होने की अनुमति देता है DateTimePicker with working BackColor

+0

यह एक पूरी तरह से लॉबोटोमाइज्ड संस्करण है जिस पर आप केवल तारीख को चुनने के लिए कैलेंडर ड्रॉपडाउन का उपयोग कर सकते हैं। – Nyerguds

1

this project के आधार पर:

CodeProject वेबसाइट देखें ड्रॉपडाउन बटन के बगल में।

Eg.1:

enter image description here

Eg.2:

enter image description here

यह काम सिर्फ निम्न कोड के साथ अपनी परियोजना में एक नया वर्ग बनाने बनाने के लिए और समाधान के पुनर्निर्माण के लिए । 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 

    ''' <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 

* ध्यान दें कि इस वर्ग के सरलीकरण किया गया है, तो यह functionallity

+0

यह विंडोज 7 में भी काम करता है, लेकिन यह कम्बोबॉक्स की वजह से डेटाटाइम पिकर को बदलता है। हालांकि अच्छा समाधान। – LuckyLuke82