2008-09-04 15 views
6

मुझे एक चर-लंबाई संदेश प्रदर्शित करने की आवश्यकता है और पाठ को चयन करने योग्य होने की अनुमति है। मैंने टेक्स्टबॉक्स को केवल पढ़ा है जो पाठ को संपादित करने की अनुमति नहीं देता है, लेकिन इनपुट कैरेट अभी भी दिखाया गया है।मैं सिस्टम में इनपुट कैरेट कैसे छिपा सकता हूं। Windows.Forms.TextBox?

चमकते इनपुट कैरेट भ्रमित है। मैं इसे कैसे छिपा सकता हूं?

उत्तर

10

आप एक Win32 कॉल

[DllImport("user32.dll")] 
static extern bool HideCaret(IntPtr hWnd); 
public void HideCaret() 
{ 
    HideCaret(someTextBox.Handle); 
} 
+2

'सिस्टम का उपयोग न करें। रनटाइम.इंटरोप सर्विसेज; ' और' शोकैर (इंटिप्रेट एचडब्ल्यूएनडी);' – Sam

1

यदि आप टेक्स्ट बॉक्स को अक्षम करते हैं (Enable=false सेट करें), तो इसमें टेक्स्ट अभी भी स्क्रॉल करने योग्य और चयन योग्य है। यदि आपको एक अक्षम टेक्स्ट बॉक्स (आमतौर पर ग्रे पृष्ठभूमि) की दृश्य प्रस्तुति पसंद नहीं है तो आप रंगों को मैन्युअल रूप से ओवरराइड कर सकते हैं।

चेतावनी दीजिये, रंगों को मैन्युअल रूप से ओवरराइड करने से आपके फॉर्म/नियंत्रण को उन सिस्टम पर अजीब लगने वाला है जो डिफ़ॉल्ट रंग/थीम सेटिंग्स का उपयोग नहीं करते हैं। ऐसा न मानें क्योंकि आपका नियंत्रण सफेद है कि हर कोई नियंत्रण सफेद होने जा रहा है। यही कारण है कि जब भी संभव हो, आपको हमेशा सिस्टम रंगों का उपयोग करना चाहिए (System.Drawing.SystemColors गणना में परिभाषित) जैसे कि SystemColors.ControlLight

+1

नहीं, टेक्स्ट बॉक्स अक्षम होने पर यह चयन योग्य (या स्क्रॉल करने योग्य नहीं) है। आप शायद इसे केवल पढ़ने के बारे में सोच रहे हैं। –

-4

AFAIK, यह नहीं किया जा सकता है। टेक्स्टबॉक्स नियंत्रण एक मजाकिया नियंत्रण है क्योंकि वास्तव में बहुत व्यवहार का है जिसे ऑपरेटिंग सिस्टम में टैप करने के तरीके में संशोधित नहीं किया जा सकता है। यही कारण है कि कूल कस्टम टेक्स्टबॉक्स कई स्क्रैच से लिखे गए हैं।

मुझे डर है कि तुम तुम क्या करने :(

4

के माध्यम से कर सकते हैं Win32 कॉल का उपयोग करते समय भूल नहीं है छिपाने के लिए इच्छा क्या करना सक्षम नहीं हो सकता हूँ पाठ बॉक्स के GotFocus घटना में कर्सर।

+2

इसके लिए धन्यवाद! मैंने सब कुछ भी इवेंट दर्ज करने की कोशिश की है लेकिन यह काम नहीं करता है लेकिन यह नौकरी करता है! – ViFer

3

बस पूर्णता के लिए, मैं एक DevExpress WinForms TextEdit control साथ प्रयोग करने के लिए इस तरह के एक कार्यक्षमता की जरूरत है।

वे पहले से ही प्रदान करता करते ई ShowCaret और HideCaret विधि, दुर्भाग्य से वे संरक्षित हैं। इसलिए मैंने एक व्युत्पन्न कक्षा बनाई जो कार्यक्षमता प्रदान करता है।

public class MyTextEdit : TextEdit 
{ 
    private bool _wantHideCaret; 

    public void DoHideCaret() 
    { 
     HideCaret(); 

     _wantHideCaret = true; 
    } 

    public void DoShowCaret() 
    { 
     ShowCaret(); 

     _wantHideCaret = false; 
    } 

    protected override void OnGotFocus(EventArgs e) 
    { 
     base.OnGotFocus(e); 

     if (_wantHideCaret) 
     { 
      HideCaret(); 
     } 
    } 
} 

कोड का उपयोग करने के लिए, बस अपने कोड में वास्तविक TextEdit वर्ग के बजाय व्युत्पन्न वर्ग का उपयोग करें और DoHideCaret() कहीं भी कहते हैं, उदाहरण के लिए: यहाँ पूरा कोड है आपके फॉर्म के निर्माता में जिसमें टेक्स्ट एडिट कंट्रोल होता है।

शायद यह भविष्य में किसी के लिए सहायक हो सकता है।

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