覆盖粘贴到TextBox

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

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

(从多行更改为单行)

我怎样才能做到这一点?

这是可能的,您可以拦截本机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); } } 

要拦截文本框控件中的消息,从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); } } 

这里建议