非IT企業に勤める中年サラリーマンのIT日記

非IT企業でしかもITとは全く関係ない部署にいる中年エンジニア。唯一の趣味がプログラミングという”自称”プログラマー。

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]

スポンサーリンク

 - C#応用編