この記事では主に、C# で 2 つのリッチテキスト ボックス コントロールのスクロール バーの同期スクロールを実現する簡単な方法を紹介します。記事内の紹介は非常に詳細であり、必要な方は以下を参照してください。 。
前書き
記事などを比較する必要がある場合があり、テキストを 2 つのリッチテキストボックス コントロールに配置することがよくありますが、スクロールして同期して表示する必要がある場合は、より優れた表示効果を実現できます。
もちろん、コントロールをオーバーロードしたりコントロールをカスタマイズしたりする従来の方法でも目的を達成できますが、初心者やこのコントロールを一度だけ使用したい人にとっては非常に面倒です。そこで次に、リッチテキストボックスのスクロールバー同期機能を簡単かつ迅速に実装する方法を紹介します。
方法は以下の通りです:
まず、winformフォームでリッチテキストボックスコントロールを2つ作成します
私がよく使う方法は以下の2つを紹介します
1つ目はgetする方法です。現在のマウス リッチテキストボックスコントロールの行番号
private int GetLineNoVscroll(RichTextBox rtb) { //获得当前坐标信息 Point p = rtb.Location; int crntFirstIndex = rtb.GetCharIndexFromPosition(p); int crntFirstLine = rtb.GetLineFromCharIndex(crntFirstIndex); return crntFirstLine; }
2番目の方法は、リッチテキストボックスコントロールの特定の行に素早く移動することです
private void TrunRowsId(int iCodeRowsID, RichTextBox rtb) { try { rtb.SelectionStart = rtb.GetFirstCharIndexFromLine(iCodeRowsID); rtb.SelectionLength = 0; rtb.ScrollToCaret(); } catch { } }
この2つの方法でスクロールバーの同期機能を実現できます。
考え方は次のとおりです: まず、richtextbox1 がスクロールするときに、GetLineNoVscroll メソッドを通じて、richtextbox1 のマウスに対応する行番号を取得します。次に、
TrunRowsId メソッドを使用して、richtextbox1 の取得した行番号を richtextbox2 に配置します。これにより、richtextbox2 が richtexbox1 のスクロール バーと一緒にスクロールします
richTextBox1 の VScroll イベントに次のコードを追加します。ここ? 、 は特定のオフセットを表します。レイアウト上の理由 (コントロールのサイズなど) により、2 つのリッチテキストボックスが同期していない可能性があります。通常は 0 を記述します。差が大きすぎる場合は、値を自分で調整してください。
private void richTextBox1_VScroll(object sender, EventArgs e) { int crntLastLine= GetLineNoVscroll(richTextBox1, panel1)-?; TrunRowsId(crntLastLine, richTextBox2); }最後に、2つのスクロールバーが同期してスクロールされます
概要
以上がC# 2 つのリッチテキストボックス コントロール スクロール バーを同期スクロールする簡単な方法を実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。