覆盖粘贴到TextBox

时间:2011-10-21 16:36:57

标签: c# winforms visual-studio-2010 textbox

我希望在特定文本框中覆盖粘贴功能。当文本粘贴到该文本框中时,我希望它执行以下操作:

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

(从多行更改为单行)

我该怎么做?

2 个答案:

答案 0 :(得分:33)

这是可能的,您可以截取本机TextBox控件获取的低级Windows消息,告知它从剪贴板粘贴。 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);
    }
}

答案 1 :(得分:5)

要拦截文本框控件中的消息,请从TextBox和。派生类 实施

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