DOBON.NET DOBON.NETプログラミング掲示板過去ログ

OnGotFocus、OnLostFocusについて

環境/言語:[環境:WindowsXP 使用言語:C#]
分類:[.NET]

はじめまして。
下記内容に躓いてしまった為、皆様のお知恵を拝借させて下さい。

[やりたいこと]
TextBoxのOnGotFocus、OnLostFocusをOverrideして、
TextAlignプロパティを変更したい。
[問題]
Click処理にて、TextBoxをActiveにするとWM_SETFOCUS、WM_KILLFOCUSが
Form上のControl数分だけ繰り返され、
[ウィンドウのハンドルを作成中にエラーが発生しました]
のエラーが発生してしまう。
なお、TabKeyによる処理は正常にTextAlignが変更されます。

上記内容を解決する術はあるのでしょうか?よろしくお願いします。
2005/05/09(Mon) 14:42:40 編集(投稿者)

> 上記内容を解決する術はあるのでしょうか?

 OnEnter / OnLeave で行えば大丈夫かと。
# ( 追記 ) ”大丈夫”というと語弊があるか‥‥。

 少し試してみたところ、 TextAlign プロパティを変更するとテキストボックスのウィンドウは再作成されるようです※。そのため OnGotFocus では問題になると思われます ( ウィンドウが作成された後に再度 WM_SETFOCUS が発生するので ) 。

※恐らく ES_LEFT / ES_CENTER / ES_RIGHT を動的に変更できない OS もあるためでしょうね。<自分で確かめたわけではないのですけど、 ( SDK の記述とは異なり ) 98 や 2000 では変更できないという話を耳にしたことがあります。
深山さま、有難うございました。
当初、OnEnter、OnLeaveで試みてみたのですが、
そうすると、TextBoxがActive時にTabKeyによるFocusが出来なくなって
しまう(OnEnter、OnEnter、OnLeave、OnLeaveの順番にイベントが発生)
ので、OnGotFocus、OnLostFocusに乗り換えた次第です。

こうなると、TextBoxBaseから継承して新しくControlを作成したりしないと
駄目なのでしょうか?
> 当初、OnEnter、OnLeaveで試みてみたのですが、
> そうすると、TextBoxがActive時にTabKeyによるFocusが出来なくなって
> しまう(OnEnter、OnEnter、OnLeave、OnLeaveの順番にイベントが発生)
> ので、OnGotFocus、OnLostFocusに乗り換えた次第です。

 ご自身で試されたことは最初に書かれたほうが良いと思いますよ。そのほうが解決が早まることも多いでしょうから。

 No10725 の発言を見たとき、私には
>> TabKeyによる処理は正常にTextAlignが変更されます。
の意味が−恥ずかしながら(///)−解りませんでした。 OnEnter / OnLeave で TextAlign プロパティの値を変更すると Tab キー操作によるフォーカス移動に支障を来たすことは確認していたので「”大丈夫”というと語弊」と書きましたけど、巳さんが既にそのことをご存知であることが明確であったならまた違った書き込みをしていたことでしょう。


 閑話休題。

> こうなると、TextBoxBaseから継承して新しくControlを作成したりしないと
> 駄目なのでしょうか?

 巳さんが真になさりたいことというのは『 TextAlign プロパティの値を変更すること』なのではなく、『フォーカスの有無によりテキストの表示位置を変更すること』なのではないでしょうか?
 であれば、少し発想を変えてフォーカスがないときだけ独自に描画するというのはどうでしょう。 UserPaint を OnEnter で false 、 OnLeave で true にすることで要件を満たせるように思うのですが如何でしょう?

【参考】
TextBoxコントロールのEnabledプロパティをFalseにしても前景色と背景色を変えないようにする
http://dobon.net/vb/dotnet/control/tbenabledfalse.html

文字を描く
http://dobon.net/vb/dotnet/graphics/drawstring.html
深山さま、ありがとうございました。

>  ご自身で試されたことは最初に書かれたほうが良いと思いますよ。そのほうが解決が早まることも多いでしょうから。
ご指摘頂いたように、質問する際は行ったことは全て書くようにします。

> 『フォーカスの有無によりテキストの表示位置を変更すること』
その通りです。わかり難い書き方ですみませんでした。


> フォーカスがないときだけ独自に描画するというのはどうでしょう。
教えて頂いた発想で無事解決致しました!
有難うございました!!!
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板