2011-10-21 11 views
10

मैं एक विशिष्ट टेक्स्टबॉक्स में पेस्ट फ़ंक्शन को ओवरराइड करना चाहता हूं। जब पाठ कि पाठ बॉक्स में चिपकाया जाता है, मैं इसे निम्नलिखित निष्पादित करने के लिए करना चाहते हैं:टेक्स्टबॉक्स में पेस्ट ओवरराइड

AddressTextBox.Text = Clipboard.GetText().Replace(Environment.NewLine, " "); 

(एकल के लिए बहु से बदल रहा है)

मैं यह कैसे कर सकते हैं?

+2

जांच इस एक: http://stackoverflow.com/questions/3446233/hook-on-default-paste-event-of-winforms-textbox-control –

उत्तर

27

कि संभव है, आप निम्न स्तर के विंडोज संदेश यह है कि देशी TextBox नियंत्रण हो जाता है को रोक सकता जो क्लिपबोर्ड से पेस्ट करने के लिए कहता है। WM_PASTE संदेश। जब आप कीबोर्ड के साथ Ctrl + V दबाते हैं या संदर्भ मेनू के पेस्ट कमांड का उपयोग करते हैं तो दोनों उत्पन्न होते हैं। आप इसे नियंत्रण के WndProc() विधि को ओवरराइड करके पकड़ते हैं, पेस्ट को वांछित के रूप में प्रदर्शन करते हैं और इसे बेस क्लास पर पास नहीं करते हैं।

अपनी परियोजना में एक नई कक्षा जोड़ें और नीचे दिखाए गए कोड को कॉपी/पेस्ट करें। संकलित करें। टूलबॉक्स के शीर्ष से नए नियंत्रण को अपने फॉर्म पर छोड़ दें, मौजूदा को बदल दें।

using System; 
using System.Windows.Forms; 

class MyTextBox : TextBox { 
    protected override void WndProc(ref Message m) { 
     // Trap WM_PASTE: 
     if (m.Msg == 0x302 && Clipboard.ContainsText()) { 
      this.SelectedText = Clipboard.GetText().Replace('\n', ' '); 
      return; 
     } 
     base.WndProc(ref m); 
    } 
} 
+0

क्या मैं इसे Program.cs या Form1.cs में डालता हूं? और क्या मुझे इसे कुछ कॉल करने की ज़रूरत है? क्योंकि यह – cb1295

+2

काम नहीं कर रहा है, आप इसे एक अलग वर्ग में डालते हैं। संकलित करें। टूलबॉक्स के शीर्ष से अपने फॉर्म पर नया नियंत्रण ड्रॉप करें। –

+1

इस कोड ने काम किया है, तो आपको जवाब मिल जाएगा। धन्यवाद!!! – cb1295

5

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

class MyTB : System.Windows.Forms.TextBox 
{ 

    protected override void WndProc(ref Message m) 
    { 
     switch (m.Msg) 
     { 

      case 0x302: //WM_PASTE 
       { 
        AddressTextBox.Text = Clipboard.GetText().Replace(Environment.NewLine, " "); 
        break; 
       } 

     } 

     base.WndProc(ref m); 
    } 

} 

सुझाव here

+0

अगर मैं अपने Form1.cs मैं में रखते निम्न त्रुटि प्राप्त करें: त्रुटि नेस्टेड प्रकार के माध्यम से बाहरी प्रकार के गैर-स्थैतिक सदस्य तक नहीं पहुंच सकते हैं और यदि मैं Program.cs में डालता हूं तो यह कहता है कि पता टेक्स्टबॉक्स वर्तमान संदर्भ में मौजूद नहीं है। – cb1295

+2

प्रोजेक्ट के माध्यम से एक नई कक्षा जोड़ें-> नया आइटम जोड़ें - वर्ग का नाम 'MyTb'। जब आप प्रोजेक्ट का निर्माण करेंगे तो MyTB टूलबॉक्स में दिखाई देगा। आप इसे अपने फॉर्म पर रख सकते हैं। –

+0

विस्तृत स्पष्टीकरण के लिए धन्यवाद, हालांकि आपके कोड ने चाल नहीं की है या मैंने इसे सही तरीके से उपयोग नहीं किया है। फिर भी धन्यवाद! – cb1295

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