dポイントプレゼントキャンペーン実施中!

OS:Windows 7 64bit
開発環境:Visual Studio 2013 Express

リッチテキストボックスでキャレットの幅を変更したいのですが、うまくいきません。
-------------------------------------------------------------
'キャレットを作成する
Private Declare Function CreateCaret Lib "user32" _
(ByVal hWnd As IntPtr, _
ByVal hBitmap As IntPtr, _
ByVal nWidth As Integer, _
ByVal nHeight As Integer _
) As Boolean
'キャレットを表示する
Private Declare Function ShowCaret Lib "user32" _
(ByVal hWnd As IntPtr) As Boolean

Private Sub RichTextBox1_Enter(sender As Object, e As EventArgs) Handles RichTextBox1.Enter
'CreateCaret(RichTextBox1.Handle, IntPtr.Zero, 7, 15)
CreateSolidCaret(5, 10)
ShowCaret(RichTextBox1.Handle)
End Sub
-------------------------------------------------------------
以上のようにして RichTextBox1 にフォーカスが来た時にキャレットの幅を変えるようにしているのですが、一度だけフォーカスが来た時にほんの一瞬だけ四角いキャレットが見えるのですが、すぐにI型に戻ってしまいます。
ググっても上記ソースくらいしか見つかりませんでした。

どなたかご享受願えませんでしょうか?
よろしくお願い致します。

A 回答 (1件)

プロシージャを抜けると作成されたキャレットが破棄されるように仕様が変更されたようで


RichTextBox1_Enter イベントで作成するとすぐにRichTextBox1_GotFocus イベントが発生し
その時点で破棄されるので、一瞬しか確認できないのです。

どうしてもなら、RichTextBox1_GotFocus イベントで作成すると次のイベントが発生するまでは
破棄されませんので表示されるようになります。
但しキー入力やマウスダウンイベントが発生すると破棄されるので、キーアップイベントと
マウスアップイベントにも書いておく必要があります。
(ダウン イベント書くと直後にアップ イベントが発生するのですぐに破棄される事になり表示されません)

テキストボックスとRichTextBox とその辺の仕様が違う理由については、よく知りません(調べていない)
    • good
    • 0
この回答へのお礼

ありがとうございます。
テストした結果、vbhanatyanさんの仰るとおりのようです。
今回はキャレットの変更は諦めます^^;

それにしても、なんでこんな仕様に変更したのか・・・

お礼日時:2014/04/03 13:04

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!