2011-10-21 15 views
10

Belirli bir metin kutusunda yapıştır işlevini geçersiz kılmak istiyorum. Metin o metin yapıştırılır, ben aşağıdaki yürütmek istiyorum:TextBox'a Yapıştır Yapıştır Geçersiz

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

(tek için satırlı Değiştirme gelen)

Bunu nasıl yapabilirim? metin kutusu denetiminde mesajları yolunu kesmek için

+2

onay bu bir: http://stackoverflow.com/questions/3446233/hook-on-default-paste-event-of-winforms-textbox-control –

cevap

27

, düşük seviyeli, Windows mesajı müdahale edebilir önerdi uygulamak Bu panodan yapıştırmak için söyler. WM_PASTE mesajı. Klavyeyle Ctrl + V tuşlarına bastığınızda veya içerik menüsünün Yapıştır komutunu kullandığınızda iki tane de oluşturulur. Denetimin WndProc() yöntemini geçersiz kılarak, yapıştırmayı istenen şekilde gerçekleştirerek ve temel sınıfa iletmeyerek yakalarsınız.

Projenize yeni bir sınıf ekleyin ve aşağıda gösterilen kodu kopyalayın/yapıştırın. Derleyin. Yeni kutuyu araç kutusunun üstünden mevcut olanı değiştirerek formunuza bırakın.

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

Bunu Program.cs veya Form1.cs içine koyar mıyım? Ve nasıl böyle çağırmalıyım? çünkü çalışmıyor – cb1295

+2

Bunu ayrı bir sınıfa koydunuz. Derleyin. Yeni kutuyu araç kutusunun üstünden formunuza bırakın. –

+1

Bu kod işi yaptı, böylece cevabı aldınız. Teşekkürler!!! – cb1295

5

, texbox Sınıf türetme ve

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); 
    } 

} 

yerli TextBox kontrol alır mümkündür here

+0

benim Form1.cs I'de bu koyarsanız Aşağıdaki hatayı al: Hata İç içe türünü kullanarak dış tür statik olmayan bir üyesi erişemiyor ve Program.cs içine koyarsanız Bu geçerli bağlamda AddressTextBox yok diyor. – cb1295

+2

Proje -> Yeni Öğe Ekle - sınıf adı olan "MyTb" ile yeni bir sınıf ekleyin. Projeyi kuracağınız zaman, MyTB araç kutusunda görünecektir. Formunuza yerleştirebilirsiniz. –

+0

Detaylı açıklama için teşekkürler, ancak kodunuz hile yapmadı veya doğru kullanmadım. Yine de teşekkürler! – cb1295

İlgili konular