2009-02-03 16 views
9

मैं एक बटन जो मैं करने के लिए "फ्लैश" संक्षेप में उपयोगकर्ता का ध्यान प्राप्त करना चाहता था की है। मुझे लगता है कि बटन की BackColor संपत्ति को दूसरे रंग में बदलने का सबसे आसान तरीका होगा, और उसके बाद इसे फिर से स्विच करें। तो मैं इस तरह कुछ करना:जब मैं एक नेट बटन BackColor अपनी मूल मूल्य को बदलने के लिए, यह नहीं दिखता है एक ही किसी भी अधिक

this.oldColor = myButton.BackColor; 
myButton.BackColor = Color.Blue; 

और उसके बाद के बाद एक के बारे में 1/2 एक दूसरे:

myButton.BackColor = this.oldColor; 

लेकिन बटन की पृष्ठभूमि का रंग खत्म जा रहा है साफ़ तौर पर बटन के बाकी की तुलना में गहरे फॉर्म पर!

सबसे पहले, मैंने सोचा कि यह था कुछ बटन के मूल रंग एक नामित रंग (इस मामले, "नियंत्रण" में) किया जा रहा है, लेकिन यह नहीं है के बारे में खास है क्योंकि इस बात।

क्या बदतर है, जब मैं डीबगर में myButton.BackColor को देखो, मैं

{Name=Control, ARGB=(255, 236, 233, 216)} 

कौन वास्तव में सही है प्राप्त करें! लेकिन जब मैं एक स्क्रीनशॉट लेता हूं, और रंग की जांच करता हूं, तो यह बाकी बटनों जैसा नहीं होता है!

वहाँ चल रहा मास्किंग किसी तरह का है? या शायद किसी तरह का दांत?

उत्तर

13

मैं इस समस्या का कारण पता लगा। बाहर निकलता है एक और संपत्ति (केवल बटन और टैबपेज के लिए, ऐसा लगता है) नाम UseVisualStyleBackColorBackColor की गणना करते समय यह "विजुअल स्टाइल" का उपयोग करना है या नहीं। और मामलों को और भी खराब बनाने के लिए, जैसे ही आप BackColor सेट करते हैं, यह false पर सेट है। तो मैं बस समाप्त हो गया यह कर:

this.oldUseVisualStyleBackColor = myButton.UseVisualStyleBackColor; 
this.oldColor = myButton.BackColor; 
myButton.BackColor = Color.Blue; 

और जब मैं इसे पुनर्स्थापित करने के लिए तैयार हूँ:

myButton.BackColor = this.oldColor; 
myButton.UseVisualStyleBackColor = this.oldUseVisualStyleBackColor; 

(। हाँ, आप पहली बार BackColor पुनर्स्थापित करने के लिए है, और उसके बाद ही UseVisualStyleBackColor सेट)

मुझे नहीं पता कि UseVisualStyleBackColor का उपयोग क्यों किया जा रहा है, या ऐसा क्यों करता है, लेकिन ऐसा लगता है कि अब यह काम करता है।

(धन्यवाद, मार्क! मुझे आपकी मदद के बिना यह नहीं मिला होगा!)

+1

@scraimer: +1। इस समस्या को दस्तावेज करने के लिए धन्यवाद। मुझे एक ही समस्या थी और Google के माध्यम से आपकी पोस्ट मिली। –

+0

+1। पहले इस संपत्ति के बारे में कभी नहीं सुना। आपका बहुत बहुत धन्यवाद! – tamberg

3

मुझे लगता है अंतर यह है कि एक एक नियमित ARGB रंग है, और एक एक प्रणाली/जाना जाता रंग है। .NET में

नियंत्रित करें कि क्या रंग स्पष्ट है (इस पर नियंत्रण पर सेट) या विरासत में मिला है पर नज़र रखें।

TextBox tb = new TextBox(); 
    tb.BackColor = Color.Red; 
    // now set it back to inherited 
    PropertyDescriptor prop = TypeDescriptor.GetProperties(tb)["BackColor"]; 
    if (prop.CanResetValue(tb)) 
    { 
     prop.ResetValue(tb); 
    } 

थोड़ा भद्दा है, लेकिन यह काम करना चाहिए: यह यह मुश्किल वापस ठीक से बदलने के लिए बनाता है ... लेकिन आप PropertyDescriptor साथ यह करने के लिए है, इसलिए की तरह कर सकता है।

+0

वाह। यह डरावना है! – scraimer

2

या फिर आप टाइप कर सकते हैं:

TextBox tb = new TextBox(); 
//Change the Backcolor 
tb.BackColor = Color.Red; 
//Resets the Backcolor to its default value, its pretty strange that you don't see the method but it works with allmost all properties 
tb.ResetBackColor(); 
+0

कूल! हां, आप हर दिन कुछ नया सीखते हैं। मैंने कोशिश नहीं की है, लेकिन अगली बार जब मुझे इसकी ज़रूरत है तो मैं इसे आजमाउंगा। धन्यवाद! – scraimer

0

सरल तरीका:

myButton.BackColor = Color.Empty 
+0

यह मेरे लिए .NET 2.0 में काम नहीं करता है - क्या कोई और पुष्टि कर सकता है कि यह काम करता है? – scraimer

3

बटन के UseVisualStyleBackColor संपत्ति को निर्धारित करता है बटन की पृष्ठभूमि दृश्य शैलियों का उपयोग कर तैयार की गई है या नहीं। जब किसी बटन की UseVisualStyleBackColor प्रॉपर्टी सत्य पर सेट की जाती है, तो BackColor प्रॉपर्टी को अनदेखा किया जाता है। जब बैककोलर प्रॉपर्टी को एक अलग रंग में बदल दिया जाता है, तो UseVisualStyleBackColor प्रॉपर्टी स्वचालित रूप से गलत पर सेट हो जाती है।

जब आप डिज़ाइन मोड में हों तो आप इस प्रभाव को देख सकते हैं। एक बटन बनाएं और बैककोलर प्रॉपर्टी को लाल रंग में बदलें। फिर UseVisualStyleBackColor प्रॉपर्टी पर स्क्रॉल करें, और ध्यान दें कि इसे गलत पर सेट किया गया है। यदि आप UseVisualStyleBackColor प्रॉपर्टी को सही पर सेट करते हैं, तो बटन रंग डिफ़ॉल्ट रंग में बदल जाएगा। UseVisualStyleBackColor प्रॉपर्टी को वापस गलत पर स्विच करने से बटन रंग लाल हो जाएगा।

निम्नलिखित प्रोग्राम इस प्रभाव को दर्शाता है।

Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load 
    Button1.BackColor = Color.Red 
End Sub 

Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click 
    Button1.UseVisualStyleBackColor = Not Button1.UseVisualStyleBackColor 
End Sub 

धन्यवाद उसकी समस्या पोस्टिंग और UseVisualStyleBackColor संपत्ति दोषी culpert के रूप में पहचान करने के लिए scraimer करने के लिए।