トップ回答者
RichTextBoxにおけるAppedTextの挙動について

質問
-
VC++2005によるRichTextBoxを使用したプログラムを作成しています。
定期的に他のプログラムから送信される文字列をAppendText()を利用してRichTextBoxに追加しているのですが、RichTextBoxのスクロールバーなどを操作して別の部分を見ようとしても、AppendText()が呼ばれるとすぐにカーソルとともに最下段に表示が移動しています。
RichTextBoxへのテキストの追加をつづけながら、ある操作を行ったときには自動的にカーソルおよび表示範囲の移動を抑止することは可能でしょうか。
AppendText()に限らず、何かよい方法があれば教えてもらえませんか。
回答
-
回答して良いのかどうなのか、深読みして書けない感じの質問ですが、焦げそうでしたの書いてみます。
VC++は、得意としていないのでVB.NETで調べてみました。
おそらく、アペンド中ず~っと自動スクロールを抑止という事ではなくて、
「ある特定の期間だけ自動スクロールを抑止」という事なんだと思います。
AppentText は、対象のRichTextBoxにフォーカスが無い場合は、勝手にスクロールしないようでした。
フォーカスが移動してしますと、新しい行が表示され続けます。
フォーカスが無い状態で、スクロールバーを掴んだだけでは、フォーカスの移動が完了していないので、スクロール可能です。
ですので、必要な間だけ、「RichTextBoxにフォーカスがいかない」か「フォーカスが行っても別のコントロールにフォーカスが即座に移動する」といった状況を作ればよいのではないでしょうか。
例えば、VScrollイベントで他のコントロールにフォーカスを移動すると言ったような事です。
もちろん、TextBox(Base)を継承してなんたらかんたらというような、高尚な方法もあると思います・・
最も高尚じゃない方法として
RichTextBox1.Text &= ”ほげほげ” にしておいて、自前スクロール(Select)仕込むとか・・
どうでしょうか(^^;
chonmage- 回答としてマーク sk7474 2009年4月30日 7:24
すべての返信
-
回答して良いのかどうなのか、深読みして書けない感じの質問ですが、焦げそうでしたの書いてみます。
VC++は、得意としていないのでVB.NETで調べてみました。
おそらく、アペンド中ず~っと自動スクロールを抑止という事ではなくて、
「ある特定の期間だけ自動スクロールを抑止」という事なんだと思います。
AppentText は、対象のRichTextBoxにフォーカスが無い場合は、勝手にスクロールしないようでした。
フォーカスが移動してしますと、新しい行が表示され続けます。
フォーカスが無い状態で、スクロールバーを掴んだだけでは、フォーカスの移動が完了していないので、スクロール可能です。
ですので、必要な間だけ、「RichTextBoxにフォーカスがいかない」か「フォーカスが行っても別のコントロールにフォーカスが即座に移動する」といった状況を作ればよいのではないでしょうか。
例えば、VScrollイベントで他のコントロールにフォーカスを移動すると言ったような事です。
もちろん、TextBox(Base)を継承してなんたらかんたらというような、高尚な方法もあると思います・・
最も高尚じゃない方法として
RichTextBox1.Text &= ”ほげほげ” にしておいて、自前スクロール(Select)仕込むとか・・
どうでしょうか(^^;
chonmage- 回答としてマーク sk7474 2009年4月30日 7:24