2011-05-14 18 views
8

मेरे भयानक मिलान गेम के निर्माण के दौरान;) मुझे एक समस्या मिली जो पूरी तरह से पहुंच से बाहर है।अक्षम नियंत्रण का टेक्स्ट रंग - इसे कैसे बदलें

जब खिलाड़ी उन पर प्रतीकों के साथ दो लेबल चुनता है तो मैं अन्य सभी लेबलों को 4 सेकंड के लिए लॉक करना चाहता हूं।

लेकिन जब मैं ऐसा करता हूं, तो सभी लेबलों का अग्रदूत भूरे रंग में बदल जाता है और प्रतीकों दिखाई दे रहे हैं। मेरा सवाल है - क्या विज़ुअल सी # में अक्षम लेबल के ForeColor को बदलने का कोई तरीका है?

परियोजना एक WinForm एप्लिकेशन है। कोशिश कर रहा से

lable1.ForeColor = Color.Black; 
+3

परियोजना का प्रकार क्या है? WinForms, WPF, ASP.NET? –

+0

इस समय आप रंग कैसे सेट कर रहे हैं? क्या आप अपना कोड पोस्ट कर सकते हैं? – Oded

+4

लेबल ** हमेशा ** "लॉक" होते हैं, कम से कम इस अर्थ में कि उपयोगकर्ता अपना टेक्स्ट संपादित नहीं कर सकते हैं या अन्यथा उन्हें कुशल बना सकते हैं। उस प्रभाव को पाने के लिए उन्हें अक्षम करने की कोई आवश्यकता नहीं है। –

उत्तर

7

रास्ता सरल: उपयोगकर्ता लेबल मैं के लिए इसे बदल क्लिक करता है

label1.ForeColor = lable1.BackColor; 

:

फिलहाल मैं कोड में किसी लेबल का रंग इस तरह से सेट जिस तरह से विंडोज़ अक्षम नियंत्रण खींचता है उसे बदलने के लिए जब आप Label प्रभावी रूप से "अक्षम" होने के लिए चाहते हैं तो ध्वज सेट करना है, और उसके बाद w0 लेने से पहले अपने Click ईवेंट हैंडलर विधि में उस ध्वज का मूल्य जांचें आप जो भी कार्रवाई चाहते हैं। अगर नियंत्रण "अक्षम" किया गया है, तो कोई कार्रवाई न करें।

कुछ इस तरह:

private bool labelDisabled = false; 

private void myLabel_Click(object sender, EventArgs e) 
{ 
    if (!labelDisabled) 
    { 
     this.ForeColor = SystemColors.ControlText; 
    } 
} 

इसके अलावा, ध्यान दें कि आप हमेशा SystemColors बजाय कुछ का Color.Black की तरह इस्तेमाल करना चाहिए।
यदि आप हार्ड-रंग विशिष्ट रंग मानों को हार्ड-कोड करते हैं, तो उपयोगकर्ता अक्सर उनके डिफ़ॉल्ट विंडोज थीम को अनुकूलित करते समय संघर्ष करेंगे। Raymond Chen अपने ब्लॉग पर एक लेख में इसके खतरों पर चर्चा करता है।

+0

धन्यवाद यह बहुत अच्छा और सरल था – Mqati

+7

"हमेशा सिस्टमकॉलर्स का उपयोग करें" सलाह पर एक टिप्पणी - मैं कहूंगा कि यह हमेशा या कभी नहीं होना चाहिए - जैसा कि सब कुछ के लिए सभी रंगों को हार्डकोड करें या उनमें से कोई भी नहीं। कभी-कभी आप विंडोज थीम के दास होने के बजाय चीजों को देखने के लिए खुद को नियंत्रित करना चाहते हैं। लेकिन उन्हें मिश्रण न करें, यही वह चीज है जब आप चीजों को विवादित करते हैं। –

+1

हां, निश्चित रूप से यह "सब कुछ या कुछ नहीं" संबंध है। लेकिन मैं आपके "दास विंडोज़ थीम" वाक्यांश के साथ समस्या उठाता हूं। यदि आप इसे "अपने उपयोगकर्ता की प्राथमिकताओं के दास" के रूप में सोचते हैं तो यह मदद करता है। एक अच्छा विचार है। –

8

बस एक नए सिरे से परिभाषित रंग घटना के साथ अपने स्वयं का लेबल बनाने:

protected override void OnPaint (System.Windows.Forms.PaintEventArgs e) 
{ 
    if (Enabled) 
    { 
     //use normal realization 
     base.OnPaint (e); 
     return; 
    } 
    //custom drawing 
    using (Brush aBrush = new SolidBrush("YourCustomDisableColor")) 
    { 
     e.Graphics.DrawString(Text, Font, aBrush, ClientRectangle); 
    } 
} 

पाठ ड्राइंग के दौरान पाठ स्वरूप झंडे के साथ सावधान रहें।

+0

किसी और के लिए जो डेटटाइम पिकर के साथ ऐसा करने का प्रयास करता है: यहां समाधान है http://stackoverflow.com/questions/1595481/datetimepicker-and-userpaint-text-and-button-issing – Breeze

संबंधित मुद्दे