2016-04-05 20 views
1

現在、入力プログラムを作成中です。私はリッチテキストボックスに読み込まれているテキストファイルを持っています。このテキストは入力する必要がありますが、richtextboxは非常に多くの行にしか収まらないので、前の行が既に試行された後、次の行にスクロールして残りのテキストを表示したいと考えています。テキストボックス次の行へスクロール

私はtextbox.ScrollToCaret()を試しましたが、すべてスクロールするとテキストボックスが上下にスクロールするようにちらつきます。

私はインデックスを記録しますが、私が試した方法はうまくいきません。

if(index > 300) 
    textbox.ScrollToCaret(); 

300テキストボックスに表示されている現在の最大文字を使用しているなどのハッキーな方法です。テキストボックスに残りの行を表示するためにスクロールする方法はありますか?必要に応じてより多くの情報を提供しています。

  wordPreview.BeginUpdate();         
      wordPreview.SelectionStart = wordPreview.TextLength; 
      wordPreview.ScrollToCaret(); 
      wordPreview.EndUpdate(); 
+0

あなたは(ScrollToCaretを試すことができます)テキスト変更イベントで - このような:http://stackoverflow.com/questions/9416608/rich-text-box-scroll-to-the-bottom-when- new-data-is-written-to-it –

+0

@DavidOesterreichこれは私が試みたものですが、TextChangedでインデックスにアクセスすることができず、テキストの長さに設定することができないため、選択範囲を0に変更しました。開始時にそれは、それがまだ必要でないときにスクロールしようとしているか、スクロールする必要があるときのように、主にちらつきます。 – Jed5931

+0

- 編集:申し訳ありません、もう一度それをテストしました。 TextLengthは自動的に行末を表示しますが、入力があると最後の行から最初の行までちらつきがあります。 – Jed5931

答えて

0

リッチテキストボックスのちらつきを取り除くしようと、あなたはリッチテキストボックスクラスを拡張し、BeginUpdateメソッドとEndUpdateの方法

拡張クラスを追加することができます。そして、あなたのテキストに変更

public static class MyExtensions 
    { 


     private const int WM_USER = 0x0400; 
     private const int EM_SETEVENTMASK = (WM_USER + 69); 
     private const int WM_SETREDRAW = 0x0b; 
     private static IntPtr OldEventMask; 

     [DllImport("user32.dll", CharSet = CharSet.Auto)] 
     private static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wParam, IntPtr lParam); 

     public static void BeginUpdate(this RichTextBox rtb) 
     { 
      SendMessage(rtb.Handle, WM_SETREDRAW, IntPtr.Zero, IntPtr.Zero); 
      OldEventMask = (IntPtr)SendMessage(rtb.Handle, EM_SETEVENTMASK, IntPtr.Zero, IntPtr.Zero); 
     } 

     public static void EndUpdate(this RichTextBox rtb) 
     { 
      SendMessage(rtb.Handle, WM_SETREDRAW, (IntPtr)1, IntPtr.Zero); 
      SendMessage(rtb.Handle, EM_SETEVENTMASK, IntPtr.Zero, OldEventMask); 
     }  
    } 

リッチテキストボックスが更新またはスクロールされるたびに、BeginUpdateおよびEndUpdateを呼び出すことができます。

richTextBox1.BeginUpdate(); 

    richTextBox1.EndUpdate(); 
+0

クラスを追加しましたが、私のTextChangedイベントで(上記のポストを編集しました)、それでもちらつきがあります。 – Jed5931

+0

それでも上下にスクロールしても修正が見つからないのですか? – Jed5931

0

TextBoxコントロールの代わりにTextBlockコントロールを使用し、TextBlockのTextWrappingプロパティを使用します。

<TextBlock TextWrapping="Wrap"/> 
関連する問題