Top > プログラミング > .NET Tips> GotFocusとLostFocusイベントはどこに行った?

GotFocusとLostFocusイベントはどこに行った?」への評価、コメント

評価

良い / 悪い = 39 / 7 (「良い」の割合 = 0.848 , 人気度 = 1.410

評価する

コメント一覧


通常のコメント
発見者 2019/11/28 (Thu) 13:24:08
(つづき)
一方GotFocus、LostFocusは発生するのだが、単にGotFocus、LostFocusを使うのではまだ問題がある。
まず、初回のGotFocusコールでtextBoxを操作(背景色を変えるとか)しようとすると、ハンドル生成中のWin32例外がでてしまう。
GotFocusはフラグ等で初回は無視し二回目以降を使い、初回については初回だけ呼ばれるEnterを使うといことをしていたが、
残る問題として、Enter、Leave、Validating、Validatedが依然として発生しないままで、カスタムToolStripのtextBoxを外部から使う際に使いづらい。

悩んだ末のベストな解決策は、カスタムToolStrip内にFocusを持てるダミーコントロールを用意し、LostFocus内ではダミーコントロールにFocusを移す処理のみ行う。
すると引き続きLeaveが発生するし、次回のEnter、Leaveも発生する。ValidatingやValidatedも発生するようになる。

通常のコメント
発見者 2019/11/28 (Thu) 10:37:32
他掲示板の情報で
Enterイベントは同じウィンドウの他のコントロールから自分のコントロールにフォーカスが移動してきたときのみイベントが発生し、
GotFocusイベントはそれに加え、他のウィンドウから自分のウィンドウにアクティブが移ったときに、自分のコントロールにフォーカスがあるとイベントが発生する。
という重大な違いが指摘されていた。そして私も、
ToolStripControlHostを継承して作成したカスタムToolStripも、それ自体が一つのウインドウと同じようにFocusが機能する。
という現象により苦労した。

例えばLabelとTextBoxを配置したカスタムToolStripを作成したとする。
TextBoxを編集開始すると、textBox.Enterが発生する。
ここでMenuStripを閉じて別のWindow内ControlにFocusを移動しても
ToolTip内部ではFocusを持てるコントロールはTextBoxただ一つのためFocusは移動しない。
つまりtextBox.Leaveは発生せず、ValidatingやValidatedも発生しない。Leaveしないから以後Enterも発生しない。
編集中のみ背景色を変えたいのに!
(つづく)

通常のコメント
管理人 2013/11/22 (Fri) 00:59:00
> TextBox1_LostFocusが2012だとエラーが出ます

Visual Studio 2012(.NET Framework 4.5)でサンプルのコードを試してみましたが、私が試した限りではエラーは出ませんでした。

通常のコメント
adytjehi 2013/11/21 (Thu) 06:24:50
TextBox1_LostFocusが2012だとエラーが出ます

評価の理由
pero 2010/09/16 (Thu) 14:22:00
評価:良い
求めていた情報がまさに。ありがとうございます

評価の理由
匿名 2010/07/7 (Wed) 17:23:32
評価:良い
5文字以上

評価の理由
名称未設定 2007/07/5 (Thu) 11:02:28
評価:良い
不明な点にピンポイントだったから

通常のコメント
管理人 2005/04/28 (Thu) 03:45:35
>確か、これは 2003 では復活してますよね?

プロパティのイベントにはやはり表示されないようですが。

通常のコメント
じゃんぬねっと 2005/04/27 (Wed) 16:56:41
確か、これは 2003 では復活してますよね?

評価の理由
yoshida 2005/02/16 (Wed) 16:00:07
評価:良い
よかったです。

コメントの投稿

[説明]