粘贴到多个文本框中

我有一个.net应用程序,其中包括一个搜索屏幕,其中一个面板有三个文本框 ,每个文本框都有不同的字符长度。

我想要做的是从第一个框调用 粘贴命令捕获并将剪贴板粘贴到三个框中。

此function类似于许多接受串行密钥和电话号码输入的现代应用程序。

据我所知,没有其他合理的方法可以捕获WM_PASTE事件。

从TexBox派生一个类并实现此方法:

using System.Windows.Forms; using System.ComponentModel; class TextBoxWithOnPaste : TextBox { public delegate void PastedEventHandler(); [Category("Action")] [Description("Fires when text from the clipboard is pasted.")] public event PastedEventHandler OnPaste; protected override void WndProc(ref Message m) { if (m.Msg == 0x302 && OnPaste != null) // process WM_PASTE only if the event has been subscribed to { OnPaste(); } else { base.WndProc(ref m); } } } 

然后在表单上放置三个自定义控件,并将所有三个文本框上的OnPaste事件分配给同一个方法,在本例中我称之为textPasted()

 private void textPasted() { String input = Clipboard.GetText(); int l1 = textBoxWithOnPaste1.MaxLength; int l2 = textBoxWithOnPaste2.MaxLength; int l3 = textBoxWithOnPaste3.MaxLength; try { textBoxWithOnPaste1.Text = input.Substring(0, l1); textBoxWithOnPaste2.Text = input.Substring(l1, l2); textBoxWithOnPaste3.Text = input.Substring(l2, l3); } catch (Exception) { } } 

既然你暗示“像一个序列号”,我猜你想要将粘贴的字符串拆分成文本框。 上面的代码并不是完美的(尝试在所有三个中手动输入数据后将单个空格粘贴到第三个文本框中,因此如果您知道文本粘贴在哪个文本框中会很好,例如通过更改事件的参数并且这样发送发件人),但它基本上有效,我猜你可以弄清楚其余的(你可以使用Tag属性来识别文本框)。

捕获粘贴事件:

 protected override void WndProc(ref Message m) { // Did paste occur? if (m.Msg == 0x302) { //Paste occurred, add your logic here } base.WndProc(ref m); } 

然后,访问Clipboard对象以获取所需的文本。

你可以得到捕获的文本String txt = Clipboard.GetText(); 并将其放在另一个文本框的“Text”属性中

您可以绑定按键事件,当您Ctrl + VCtrl + v ,可以使用剪贴板中的值更新三个文本框的值。 您可以在第一个文本框中的TextChanged事件上执行此操作。

您可以增加框的字符限制并注册TextChanged ,如果粘贴(或键入)文本更长跳/切到下一个TextBox