WPF粘贴Unicode文本用换行到多个文本框状
问题描述:
我生成这样的文本框:WPF粘贴Unicode文本用换行到多个文本框状
for (byte i = 0; i < 4; ++i)
for (byte j = 0; j < 4; ++j)
Letterbox[i, j] = new TextBox();
Letterbox[i, j].Style = style; //MaxLength=1 among other things
...
,我会想,像这样粘贴的字符串:
T
Ę
Ś
T
会导致含前4个文本框'T','Ę','Ś'和'T'。 我该如何做到这一点?
澄清(编辑):
我希望能够粘贴在这种格式的任何字符串(字母输入,字母,进入...)的应用程序运行时,没有硬编码
答
您可以使用AddPasteHandler
像这样:
DataObject.AddPastingHandler(tb, OnPaste);
OnPaste
方法实现:
private void OnPaste(object sender, DataObjectPastingEventArgs e)
{
var isText = e.SourceDataObject.GetDataPresent(DataFormats.UnicodeText, true);
if (!isText) return;
var text = e.SourceDataObject.GetData(DataFormats.UnicodeText) as string;
HandlePaste(text);
e.Handled = true;
}
private void HandlePaste(string text)
{
var letters = text.Split(new[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries);
if (letters.Length == 4)
{
for (var i = 0; i < 4; i++)
{
Letterbox[0, i].Text = letters[i];
}
}
}
tb是我的窗口,其他一些TextBox
,你可以使用任何适合您的要求。 HandlePaste
粘贴的字符串被换行符分隔,当它适合4个文本框时,每个文本的文本被设置为适当的字母。你可以在这里添加一些验证,比如检查每个字符串的长度是否恰好是一个字符。
+0
谢谢,它的工作原理! – Jecke
不是'Letterbox [i,j] .Text =“T”'为你工作吗?对于新行使用:'“T”+“\ n”' –
我希望能够在应用程序运行时以此格式(letter,enter,letter,enter ...)粘贴任何字符串,而不是对其进行硬编码。 – Jecke
将'KeyDown'事件添加到您的文本框中。当按Enter键时,通过'\ n' –