2009-12-22 13 views
10

जब भी मैं RichTextBox.Enabled संपत्ति को गलत पर सेट करता हूं, तो इसका पृष्ठभूमि रंग स्वचालित रूप से ग्रे पर सेट हो जाता है क्योंकि यह नियंत्रण कक्ष में सेट सिस्टम रंग में रंग पर सेट होता है। अगर मैं इसे अक्षम करने के लिए सेट करता हूं तो भी मैं अपना रंग काला में कैसे बदल सकता हूं?अक्षम होने पर समृद्ध टेक्स्ट बॉक्स के पृष्ठभूमि रंग को कैसे बदला जाए?

उत्तर

11

देखें: How to change the font color of a disabled TextBox?

[संपादित करें - कोड उदाहरण जोड़ा]

richTextBox.TabStop = false; 
richTextBox.ReadOnly = true; 
richTextBox.BackColor = Color.DimGray; 
richTextBox.Cursor = Cursors.Arrow; 
richTextBox.Enter += richTextBox_Enter; 

private void richTextBox_Enter(object sender, EventArgs e) 
{ 
    // you need to set the focus somewhere else. Eg a label. 
    SomeOtherControl.Focus(); 
} 

या एन विस्तार पद्धति के रूप में (मुझे एहसास हुआ कि आप घटना दर्ज के बाद से केवल पढ़ने में रख की जरूरत नहीं है किसी भी इनपुट पकड़ता):

public static class MyExtensions 
{ 
    public static void Disable(this Control control, Control focusTarget) 
    { 
     control.TabStop = false; 
     control.BackColor = Color.DimGray; 
     control.Cursor = Cursors.Arrow; 
     control.Enter += delegate { focusTarget.Focus(); }; 
    } 
} 
+0

यह मेरी बात नहीं है! – Badr

+0

@moon: हाँ यह है। –

+3

@moon: हां यह है, आपको नियंत्रण को सेट करने और इसे अक्षम करने के बजाय मैन्युअल रूप से अपने रंग सेट करना होगा। नियंत्रण को अक्षम करने से ओएस सेटिंग्स का उपयोग किया जाएगा कि यह कैसे प्रदान किया जाता है। –

1

DrawStringDisabled Method पर एक नज़र डालें। आपको OnPaint विधि ओवरराइड करना होगा और फिर DrawStringDisabled विधि का उपयोग करना होगा। लेकिन, अगर मैं आपकी जगह पर था तो मैं Mikael Svenson's उत्तर के साथ जाऊंगा।

3

के नीचे कस्टम रिचटेक्स्टबॉक्स बनाएं, यह एक पारदर्शी बैककलर के साथ एक रिचटेक्स्टबॉक्स का उत्पादन करेगा। फिर आप इस नियंत्रण को एक उपयुक्त रंगीन पैनल पर रख सकते हैं।

Public Class MyRichTextBox 
Inherits RichTextBox 
<DllImport("kernel32.dll", CharSet:=CharSet.Auto)> _ 
Shared Function LoadLibrary(ByVal lpFileName As String) As IntPtr 
End Function 
Protected Overloads Overrides ReadOnly Property CreateParams() As CreateParams 
    Get 
     Dim prams As CreateParams = MyBase.CreateParams 
     If LoadLibrary("msftedit.dll") <> IntPtr.Zero Then 
      prams.ExStyle = prams.ExStyle Or &H20 'Makes Transparent 
      prams.ClassName = "RICHEDIT50W" 
     End If 
     Return prams 
    End Get 
End Property 
3

इसके देर से, लेकिन इसके नहीं एक बुरी तरह से,

private void richTextBox1_ReadOnlyChanged(object sender, EventArgs e) 
    { 
     //just here instead of White select your color 

     richTextBox1.BackColor = Color.White; 
    } 

    private void Form1_Load(object sender, EventArgs e) 
    { 
     richTextBox1.ReadOnly = true; 
    } 
3

अपने इच्छित रंग को backcolor प्रॉपर्टी सेट और फिर richtextbox तक केवल पढ़ने के सेट करने के लिए।

पूर्व:

richTextBox.BackColor = Color.White; 
richTextBox.ReadOnly = true; 
+0

काफी काम नहीं करता है, रीडोनली अभी भी चयन, स्क्रॉलिंग इत्यादि की अनुमति देता है –

+0

+1 क्योंकि मेरी स्थिति में सक्षम/अक्षम व्यवहार अविश्वसनीय लग रहा था जब ShowSelectionMargin को सत्य पर सेट किया गया था। –

4

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

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 सक्षम सेट कर सकते हैं =, और यह एक लेबल की तरह कार्य करेगा, ध्यान, उपयोगकर्ता इनपुट, कर्सर परिवर्तन को रोकने, वास्तव में अक्षम किया जा रहा बिना।

देखें कि यह आपके लिए काम करता है या नहीं। ग्रीटिंग्स

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

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