2017-07-27 104 views
0

我生成这样的文本框: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'。 我该如何做到这一点?

澄清(编辑):

我希望能够粘贴在这种格式的任何字符串(字母输入,字母,进入...)的应用程序运行时,没有硬编码

Here's an image explaining what I want.

+0

不是'Letterbox [i,j] .Text =“T”'为你工作吗?对于新行使用:'“T”+“\ n”' –

+0

我希望能够在应用程序运行时以此格式(letter,enter,letter,enter ...)粘贴任何字符串,而不是对其进行硬编码。 – Jecke

+0

将'KeyDown'事件添加到您的文本框中。当按Enter键时,通过'\ n' –

回答

1

您可以使用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