2017-12-29 19 views
-1

rtb의 크기로 문자 수를 제한하는 방법은 무엇입니까? WPF 텍스트 상자에 대한 동일한 질문.C# Winforms RichTextBox. rtb의 크기에 따라 문자 수를 제한하는 방법은 무엇입니까?

rtb의 clientSize를 Graphics.MeasureStringTextRenderer.MeasureText으로 비교하여 제한하려고 시도했지만 둘 다 계산에 실수가 있으며 TR.MeasureText은 하나의 긴 단어를 rtb로 감쌀 수 없습니다. 그래서 긴 말로 큰 문제가 있습니다.

WPF에서는 텍스트 크기를 얻기 위해 FormattedText을 사용했지만 긴 단어도 줄이지 않습니다.

논리 정보 : 붙여 넣기 명령에서 텍스트 필드에 Adobe Acrobat 논리를 만들려고했습니다. 다른 텍스트 중간에 긴 텍스트를 붙여 넣을 때 가능한 수의 문자 만 붙여 넣습니다.

내 언어는 죄송합니다.

+0

'WPF'의 경우'TextBox' [MSDN 문서] (https://msdn.microsoft.com/en-us/library/system.windows.controls.textblock.texttrimming()에서'TextTrimming' 속성을 사용합니다) v = .110) .aspx). 그러나 어떤 코드도없이 우리는 추측 만 할 수 있습니다. – XAMlMAX

답변

0

WPF 의 경우 TextBox의 "MaxLength"속성을 사용하십시오.

텍스트를 붙여 넣을 때 설정된 문자 수로 제한되지만 줄 바꿈 (CR LF - 2 자)도 포함된다는 점에 유의하십시오. 텍스트의 중간에 붙여 넣으면 붙여 넣은 내용이 MaxLength까지 남은 문자 수로 제한됩니다. 세트 MaxWidth을 갖는 TextBox과 WPF의 권취기구에 기초하여 텍스트를 트리밍 - OP는이 폭이 아니라 길이 관한 언급 때문에

,이 경로를 고려하는 것이다.

private void this_TextChanged(object sender, TextChangedEventArgs e) 
    { 
     if (sender is TextBox) 
     { 
      var textb = sender as TextBox; 
      if (textb.LineCount > 1) 
      { 
       foreach (var change in e.Changes.Where(x=>x.RemovedLength == 0)) 
       { 
        for (int index = change.AddedLength; index > 0; index--) 
        { 
         textb.Text = textb.Text.Remove(change.Offset, 1); 
         textb.UpdateLayout(); 
         if (textb.LineCount == 1) 
          break; 
        } 
        if (textb.LineCount == 1) 
         break; 
       } 
      } 
     } 
    } 

그리고 이것은 대략적인 예입니다

<TextBox TextChanged="this_TextChanged" MaxWidth="200" Text="{Binding TextValue}" TextWrapping="Wrap"/> 

같은 텍스트 상자에 대한 .xaml - 당신은 이미 기존 텍스트의 일부를 선택하면, 그러나 그것은 작동하지 않습니다 붙여 넣은 텍스트가 잘 작동 트리밍 및 붙여 넣기 텍스트로 교체하려고 - 문제는 한 번 더 발사의 TextChanged 내의 텍스트, 업데이트에서 온다 -를 빼고 같은 방법으로 붙여 넣기 :

e.Changes.Where(x=>x.RemovedLength == 0) 

를 앞의 텍스트가 대신 TextBox를 다듬어야합니다.

+0

그래,하지만 난 MaxLength하지 않습니다. 그리고 심볼의 너비가 다르기 때문에 계산할 수 없습니다. 모노 스페이스 글꼴에만 유용합니다. – Zeratul47

+0

아, 나는 텍스트 길이가 아니라 텍스트 너비라고 생각했습니다. 쉬운 작업은 아니지만 고려해야 할 경로로 답변을 업데이트했습니다. – Rachey