2014-07-13 6 views
-1

저는 실시간 편집을 허용하는 프로그램에서 일하고 있습니다. 읽기 전용 모드의 RTbox를 사용하여 텍스트를 보여줍니다.TextChanged 이벤트에서 RichTextBox 텍스트를 다른 Richtextbox로 빠르게 설정하는 방법은 무엇입니까?

public class Texts : RichTextBox 
    { 
     Paragraph p = new Paragraph(); 
     FlowDocument fd = new FlowDocument(); 
     TextRange tr; 

     public Texts() 
     { 
      //_RtStylish is a class I made to create all the Brushes, Bitmaps and fonts stuff. It's kind of long to do this for each one so I implemented it to just write a simple line with my class. 
      Background = _RtStylish._tr_cl; 
      Foreground = _RtStylish._stdCl; 

      BorderThickness = _RtStylish.t_flat; 
      Width = 100; 
      Height = 30; 
      FontFamily = _RtStylish._font("Arial"); 
      FontSize = 40; 
      Document = fd; 
     } 

     public void _text(string txt) 
     { 
      p.Inlines.Add(txt); 
      fd.Blocks.Add(p); 
//To add text I just write RichTextBox._text("Something"); 
     } 



     public string _readText() 
     { 
      tr = new TextRange(fd.ContentStart, fd.ContentEnd); 
      return tr.Text; 
     } 
//This returns a string with the text inside the RTbox 

     public void _Cleartxt() 
     { 
      p.Inlines.Clear(); 
      fd.Blocks.Clear(); 
      p.Inlines.Add(""); 
      fd.Blocks.Add(p); 
     } 
//Clears my box 

     public void _alignment(int n) 
     { 
      switch (n) 
      { 
       case 0: 
      fd.TextAlignment = TextAlignment.Center; 
      break; 
       case 1: 
      fd.TextAlignment = TextAlignment.Justify; 
      break; 
       case 2: 
      fd.TextAlignment = TextAlignment.Left; 
      break; 
       case 3: 
      fd.TextAlignment = TextAlignment.Right; 
      break; 
      } 
     } 


    } 

문제는 내가 진짜의 축소 사본이며, 할 수있는 두 번째 창을 가지고있다 :

은 내가이 사용자 정의 요소 클래스를 만들어 텍스트를 읽기/쓰기를 용이하게하기 위하여 실시간 편집을 위해 RTbox에서 텍스트를 변경하십시오. 그래서 내가 한 것은이 사건이었고, 모든 부자 상자에게주고 : 나는 텍스트 상자를 취소하지 않으면

private void _text(Object o, TextChangedEventArgs e) 
    { 
     if(_Tmod.IsFocused) 
     { 
      _title._Cleartxt(); 
      _title._text(_Tmod._readText()); 
     } 
     else if(_Qmod.IsFocused) 
     { 
      _question._Cleartxt(); 
      _question._text(_Qmod._readText()); 
     } 
     else if(_Amod.IsFocused) 
     { 
      _ans._Cleartxt(); 
      _ans._text(_Amod._readText()); 
     } 

    } 

가 이전 텍스트 + = 새로운 텍스트를 떠날 것이다. 예를 들어, 기본 창 텍스트에 "Hellowww"라고 입력 한 다음 RTbox 편집기로 수정하고 "a"가 표시되면 "HellowHellowa"를 추가하여 상자를 지워야합니다.

괜찮 았지만 사용자가 편집기의 텍스트를 입력 할 때 주 창에 표시 될 때 다소 느려집니다. 이것은 Box doccument를 지우고 텍스트를 변경할 때마다 새 블록을 추가하기 때문에 발생한다고 생각합니다. 텍스트 상자의 텍스트를 변경할 때 다른 텍스트 상자에 텍스트를 할당하는 더 빠른 방법이 있습니까?

WinForms에서 그것은 TextBox1.Text = EditorTextbox.Text;과 같을 것이고 뒤떨어지지 않습니다. 뒤늦은 말은 긴 텍스트를 쓰는 사이에 약간의 일시 중지가 필요하다는 뜻입니다. 비록,이 모든 문자를 놓치지 않고 내가

에게 :(윈폼이 같은 작업을 수행하는 모든 개선 방법을 랙이 볼 수있는 프로그램을 좋아하지 않아?

+0

당신은 데이터 바인딩을 생각 해 봤나? – user2588666

답변

0

을 당신은 당신이 경우 원하는 일을 할 data binding을 사용할 수 있습니다 당신은 A Bindable WPF RichTextBox를 사용하면 동일한 텍스트가 두 TextBox ES에 표시 할 경우에, 당신은 단지 두 RichTextBox ES에 Document 속성에 같은 FlowDocument 속성을 바인딩 할 수 있습니다 :.

<Prefix:BindableRichTextBox Name="TextBox1" Document="{Binding YourProperty}" /> 
... 
<Prefix:BindableRichTextBox Name="TextBox2" Document="{Binding YourProperty}" /> 

를 사용하면 편집 된 버전을 표시하려면 텍스트의 D 텍스트를 편집 다른 속성 :

public FlowDocument YourProperty 
{ 
    get { return yourProperty; } 
    set 
    { 
     yourProperty = value; 
     NotifyPropertyChanged("YourProperty"); 
     NotifyPropertyChanged("YourEditedProperty"); 
    } 
} 

public FlowDocument YourEditedProperty 
{ 
    get { return SomeManipulationMethod(YourProperty); } 
} 

은 ...

<Prefix:BindableRichTextBox Name="TextBox1" Document="{Binding YourProperty}" /> 
... 
<Prefix:BindableRichTextBox Name="TextBox2" Document="{Binding YourEditedProperty}" />