C#:RichTextBoxで色変換中にスクロールさせない方法
2016/06/11
[ad#top-1]
RichTextBoxではFindメソッドやSelectメソッドで文字列を選択してからフォントを変えることになりますが、複数文字列を一括してやろうとすると、選択するたびにスクロールがキャレット位置に応じて自動で動きます。これがウザイ場合があります。
対策として一番よくやるのがフォーカスを別のコントロール(例えばボタンとか)に渡して、処理が終わったら再度RichTextBoxに戻す方法です。
button1.Focus();
int currentSelectionStart = richTextBox1.SelectionStart;
int currentSelectionLength = richTextBox1.SelectionLength;
・・・処理・・・
richTextBox1.Select(currentSelectionStart, currentSelectionLength);
richTextBox1.Focus();
これだと確かに処理中にスクロールが動きませんが、全く同じスクロール位置に戻るとは限りません。処理後のSelectで戻ったキャレット位置に応じた最適なスクロール位置になるので、元々のスクロール位置に戻るわけではないのです。
スクロール位置をset/getできるプロパティがあれば良いのですが、RichTextBox(TextBoxも)にはこれがありません。
そこで、お勧めしたいのがEnabledプロパティです。
richTextBox1.Enabled=false;
int currentSelectionStart = richTextBox1.SelectionStart;
int currentSelectionLength = richTextBox1.SelectionLength;
・・・処理・・・
richTextBox1.Select(currentSelectionStart, currentSelectionLength);
richTextBox1.Enabled=true;
フォーカスを外すのではなく、イメージ的に言うと”固めてしまう”わけです。Enabledをfalseにすることでこれが実現できます。
是非やってみてください。
[ad#ad-1]
スポンサーリンク