2008-11-09 34 views
51

क्या कोई जानता है कि कौन सी संपत्ति अक्षम नियंत्रण के लिए टेक्स्ट रंग सेट करती है? मुझे अक्षम TextBox में कुछ टेक्स्ट प्रदर्शित करना है और मैं इसका रंग काला रंग में सेट करना चाहता हूं।अक्षम टेक्स्टबॉक्स का फ़ॉन्ट रंग कैसे बदलें?

+3

जवाब की जरूरत है सही है संभाल। Reflagging पर विचार करें? –

उत्तर

49

नोट: चीता का जवाब नीचे देखें क्योंकि यह इस समाधान को काम करने के लिए एक शर्त की पहचान करता है। TextBox के BackColor को सेट करना।


मुझे लगता है कि आप वास्तव में क्या करना चाहते हैं TextBox सक्षम और true को ReadOnly गुण सेट है।

अक्षम TextBox में टेक्स्ट के रंग को बदलने में थोड़ा मुश्किल है। मुझे लगता है कि आपको शायद OnPaint ईवेंट को उपclass और ओवरराइड करना होगा।

ReadOnly हालांकि आपको !Enabled के समान परिणाम देना चाहिए और आपको TextBox के रंग और स्वरूपण को नियंत्रित करने की अनुमति देता है। मुझे लगता है कि यह अभी भी TextBox से पाठ का चयन और प्रतिलिपि बनाने का समर्थन करेगा जो एक अक्षम TextBox के साथ संभव नहीं है।

एक और आसान विकल्प TextBox के बजाय Label का उपयोग करना है।

+1

यह इस तरह से ठीक काम करता है। धन्यवाद! –

+0

यदि यह आपका उत्तर है तो आगे बढ़ें और मेरे लिए चेक पर क्लिक करें :) –

+0

यह सही जवाब नहीं है लेकिन यह एक उचित विकल्प है;) –

50

इसके अतिरिक्त, फोरकोलर को टेक्स्टबॉक्स पर रीडऑनली पर ध्यान देने के क्रम में, आपको स्पष्ट रूप से बैककोलर सेट करना होगा। यदि आप अभी भी डिफ़ॉल्ट बैककॉलर का उपयोग करना चाहते हैं, तो आपको सेट को स्पष्ट करना होगा, क्योंकि डिजाइनर यहां अपने स्वयं के लिए बहुत स्मार्ट है। बैककोलर को अपने वर्तमान मूल्य पर सेट करना पर्याप्त है। मैं फार्म के लिए लोड घटना में ऐसा करते हैं, तो जैसे:

private void FormFoo_Load(...) { 
    txtFoo.BackColor = txtFoo.BackColor; 
} 
+0

जानकारी के लिए धन्यवाद, मैं सोच रहा था कि यह क्यों काम नहीं कर रहा था! कोई विचार क्यों वास्तव में यह हो रहा है? –

+4

आईआईआरसी, रंगों को अनुकूलित करने के लिए कहीं भी एक ध्वज है। बैककोलर सेट होने तक वह ध्वज सेट नहीं होता है। मुझे अब यह नहीं मिल रहा है, लेकिन यदि आप परावर्तक में घूमते हैं, तो आप सक्षम हो सकते हैं। – Cheetah

+1

+1। हालांकि यह भिखारी विश्वास है। – smirkingman

5

हाय कोड की ओर से सही करने के लिए केवल पढ़ने के लिए विशेषता सेट या समय-समय पर डिजाइन नहीं चला

txtFingerPrints.BackColor = System.Drawing.SystemColors.Info; 
txtFingerPrints.ReadOnly = true; 
1

आप कर सकते हैं इसे इस्तेमाल करे। टेक्स्टबॉक्स की ऑनपेंट घटना को ओवरराइड करें।

protected override void OnPaint(PaintEventArgs e) 
{ 
    SolidBrush drawBrush = new SolidBrush(ForeColor); //Use the ForeColor property 
    // Draw string to screen. 
    e.Graphics.DrawString(Text, Font, drawBrush, 0f,0f); //Use the Font property 
} 

ControlStyles करने के लिए "UserPaint"

public MyTextBox()//constructor 
{ 
    // This call is required by the Windows.Forms Form Designer. 
    this.SetStyle(ControlStyles.UserPaint,true); 

    InitializeComponent(); 

    // TODO: Add any initialization after the InitForm call 
} 

Refrence

या आप इस हैक

में दर्ज घटना फ़ोकस सेट कोशिश कर सकते हैं सेट

int index=this.Controls.IndexOf(this.textBox1); 

this.Controls[index-1].Focus(); 

तो आपका नियंत्रण ध्यान केंद्रित नहीं करेगा और अक्षम की तरह व्यवहार करेगा।

0

आप वह पाठ संपादित नहीं किया जा सकता है या चयनित आप बस @ spoon16 और @Cheetah से जवाब देने के लिए इसके अलावा एक लेबल

+0

यदि आपके पास टेक्स्टबॉक्स के विरुद्ध सत्यापनकर्ता नियंत्रण नहीं है। Validators एएसपी पर काम नहीं करते हैं: दुर्भाग्य से लेबल। जैसा कि आपने पहले सोचा उतना आसान नहीं है। – Fandango68

0

उपयोग कर सकते हैं प्रदर्शित करने के लिए चाहते हैं, मैं हमेशा tabstop संपत्ति गलत पर करने के लिए पाठ बॉक्स पर सेट डिफ़ॉल्ट रूप से पाठ को चुनने से रोकें।

वैकल्पिक रूप से, आप भी कुछ इस तरह कर सकते हैं:

private void FormFoo_Load(...) { 
    txtFoo.Select(0, 0); 
} 

या

private void FormFoo_Load(...) { 
    txtFoo.SelectionLength = 0; 
} 
4

मैं सिर्फ इतना है कि ऐसा करने का एक शानदार तरीका मिल गया है। मेरे उदाहरण में मैं एक RichTextBox उपयोग कर रहा हूँ, लेकिन यह किसी भी नियंत्रण के साथ काम करना चाहिए:

public class DisabledRichTextBox : System.Windows.Forms.RichTextBox 
{ 
    // See: http://wiki.winehq.org/List_Of_Windows_Messages 

    private const int WM_SETFOCUS = 0x07; 
    private const int WM_ENABLE  = 0x0A; 
    private const int WM_SETCURSOR = 0x20; 

    protected override void WndProc(ref System.Windows.Forms.Message m) 
    { 
     if (!(m.Msg == WM_SETFOCUS || m.Msg == WM_ENABLE || m.Msg == WM_SETCURSOR)) 
      base.WndProc(ref m); 
    } 
} 

आप सुरक्षित रूप से सच सक्षम सेट कर सकते हैं = और ReadOnly = false, और यह एक लेबल की तरह कार्य करेगा, रोकने फोकस, उपयोगकर्ता इनपुट, वास्तव में अक्षम किए बिना कर्सर परिवर्तन।

देखें कि यह आपके लिए काम करता है या नहीं। अभिवादन

1

बस बदल सक्षम और रंग के लिए सेट आप चीता से

private void TextBoxName_EnabledChanged(System.Object sender, System.EventArgs e) 
{ 
    ((TextBox)sender).ForeColor = Color.Black; 
} 
संबंधित मुद्दे