Насколько я могу найти, нет другого разумного способа сделать это, кроме как захватить событие 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
для идентификации текстового поля).