トップ回答者
RichTextBoxのキャレットが非表示になる

質問
-
VC++ 2008 でRichTextBoxを使用した画面を作成しています。
以下、作成手順です。
1.新規フォームを作成
2.RichTextBox、ボタン、ラベルの各コントロールを追加
3.RichTextBoxのプロパティのTextに表示したい文字を記載
この状態で実行すると、RichTextBoxに、上記3で設定した文字が表示され、キャレットも点滅表示します。
しかし、RichTextBoxとは関係の無い、ボタン(クリックでラベルに文字を表示させる)をクリックすると、RichTextBox内のキャレットが消えてしまいます。
今回の画面では、RichTextBoxのキャレットは表示したままとしたいのですが、ボタンをクリックすると消えてしまいます。
色々と調べましたが、なぜボタンがクリックされると、RichTextBoxのキャレットが消えるのか分かりませんでした。
解決法など、ご存知の方おられましたら、ご教授お願いします。
回答
-
色々と調べましたが、なぜボタンがクリックされると、RichTextBoxのキャレットが消えるのか分かりませんでした。
キャレット(カレット)は「キーボード入力フォーカス」を持つウインドウだけが表示するべきだあるという
解決法など、ご存知の方おられましたら、ご教授お願いします。
MSのガイドラインがあります。他のウインドウやコントロールをクリックするとそのウインドウ
やコントロールに「キーボード入力フォーカス」が移動してしまう場合があります(ごく普通の動作です)。
一般に、ガイドラインに沿ったコードになっている場合、「キーボード入力フォーカス」を失ったウインドウ
(この場合RichTextBox)はキャレットを非表示にします。
新しく「キーボード入力フォーカス」を取得した自アプリのコントロールが、特に「キーボード入力フォーカス」を
必要としない場合(ボタン等)場合、あたらためてRichTextBoxにフォーカスを設定しなおしせば、見た目上は
キャレットが表示されるかもしれません。
.Netの場合、あんまり細かい制御を利かせるのはコスト的に意味がないので、
細かいことは気にする必要の無いアプリケーションにのみ使用すべきです。- 回答としてマーク 高橋 春樹 2010年2月23日 2:44
-
Windowless Rich Editを使用すれば、CaretなどUIのCustomizeが可能です。
ただし、習得すべき知識と実装量は大変多いため、
勉強目的以外ではお勧めしません。
逆に言えば、それだけ得られる知識は素晴らしく多いです。
Windowless Rich Editは.NET(Forms Application)で用意されていないため、
API/COMから始めることになります。
その後、.NET(Designerも含め)で扱えるようにComponent Moduleにしていく作業になります。
[Windowless Rich Edit Controls]
http://msdn.microsoft.com/en-us/library/bb787609(VS.85).aspx
或いは、小手先の技でFocus処理を行うというのもありますが、
Controlの構成によっては、不都合が出てくるのでお勧めしません。- 回答としてマーク 高橋 春樹 2010年2月23日 2:44
すべての返信
-
色々と調べましたが、なぜボタンがクリックされると、RichTextBoxのキャレットが消えるのか分かりませんでした。
キャレット(カレット)は「キーボード入力フォーカス」を持つウインドウだけが表示するべきだあるという
解決法など、ご存知の方おられましたら、ご教授お願いします。
MSのガイドラインがあります。他のウインドウやコントロールをクリックするとそのウインドウ
やコントロールに「キーボード入力フォーカス」が移動してしまう場合があります(ごく普通の動作です)。
一般に、ガイドラインに沿ったコードになっている場合、「キーボード入力フォーカス」を失ったウインドウ
(この場合RichTextBox)はキャレットを非表示にします。
新しく「キーボード入力フォーカス」を取得した自アプリのコントロールが、特に「キーボード入力フォーカス」を
必要としない場合(ボタン等)場合、あたらためてRichTextBoxにフォーカスを設定しなおしせば、見た目上は
キャレットが表示されるかもしれません。
.Netの場合、あんまり細かい制御を利かせるのはコスト的に意味がないので、
細かいことは気にする必要の無いアプリケーションにのみ使用すべきです。- 回答としてマーク 高橋 春樹 2010年2月23日 2:44
-
Windowless Rich Editを使用すれば、CaretなどUIのCustomizeが可能です。
ただし、習得すべき知識と実装量は大変多いため、
勉強目的以外ではお勧めしません。
逆に言えば、それだけ得られる知識は素晴らしく多いです。
Windowless Rich Editは.NET(Forms Application)で用意されていないため、
API/COMから始めることになります。
その後、.NET(Designerも含め)で扱えるようにComponent Moduleにしていく作業になります。
[Windowless Rich Edit Controls]
http://msdn.microsoft.com/en-us/library/bb787609(VS.85).aspx
或いは、小手先の技でFocus処理を行うというのもありますが、
Controlの構成によっては、不都合が出てくるのでお勧めしません。- 回答としてマーク 高橋 春樹 2010年2月23日 2:44
-
こんにちは。フォーラムオペレーターの高橋春樹です。
ふるかわあきひとさん、仲澤さん、kozzさん
アドバイスの投稿、有難うございました。sunafukinさん
MSDNフォーラムのご利用有難うございます。
ふるかわあきひとさん、仲澤さん、kozzさんからアドバイスを頂いたと思うのですが、如何でしょうか?
今回、皆様からのアドバイスが、有用な情報だと思いましたので、勝手ながら、回答マークを付けさせてもらいました。
もし、疑問点がありましたら、皆様の投稿に返信して頂きたいと思います。尚、回答マークは問題解決を意味するものではないので、その他アドバイスがありましたら
ご投稿の程、宜しくお願いします。
マイクロソフト株式会社 フォーラム オペレーター 高橋春樹