2010-08-10 5 views

Répondre

16

Bien que je normalement suggère de ne pas tomber à bas niveau API Windows, et cela ne peut pas être la seule façon de le faire, il fait le tour:

using System; 
using System.Windows.Forms; 

public class ClipboardEventArgs : EventArgs 
{ 
    public string ClipboardText { get; set; } 
    public ClipboardEventArgs(string clipboardText) 
    { 
     ClipboardText = clipboardText; 
    } 
} 

class MyTextBox : TextBox 
{ 
    public event EventHandler<ClipboardEventArgs> Pasted; 

    private const int WM_PASTE = 0x0302; 
    protected override void WndProc(ref Message m) 
    { 
     if (m.Msg == WM_PASTE) 
     { 
      var evt = Pasted; 
      if (evt != null) 
      { 
       evt(this, new ClipboardEventArgs(Clipboard.GetText())); 
       // don't let the base control handle the event again 
       return; 
      } 
     } 

     base.WndProc(ref m); 
    } 
} 

static class Program 
{ 
    /// <summary> 
    /// The main entry point for the application. 
    /// </summary> 
    [STAThread] 
    static void Main() 
    { 
     Application.EnableVisualStyles(); 
     Application.SetCompatibleTextRenderingDefault(false); 

     var tb = new MyTextBox(); 
     tb.Pasted += (sender, args) => MessageBox.Show("Pasted: " + args.ClipboardText); 

     var form = new Form(); 
     form.Controls.Add(tb); 

     Application.Run(form); 
    } 
} 

En fin de compte la boîte à outils WinForms est pas très bon . C'est un wrapper thin-ish autour de Win32 et les contrôles communs. Il expose les 80% de l'API qui est le plus utile. Les 20% restants sont souvent manquants ou non exposés d'une manière évidente. Je suggère de s'éloigner de WinForms et de WPF si possible car WPF semble être un meilleur cadre architecturé pour les interfaces graphiques .NET.

+0

merci, je viens d'apprendre sth nouveau (pas seulement comment attraper "coller", écrou une façon de faire des choses) – David

+0

mot-clé de l'événement est manquant sur déclaration de champ Pasted et pourquoi utilisez-vous une variable locale evt? – Maxence

+0

@Maxence, FTFY. – dahvyd

Questions connexes