tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板 [ツリー表示へ]   [Home]
一括表示(VB6.0)
タイトルGetForcus,LostForcusが同時に動いたり、動かなかったりで困っています
記事No11609
投稿日: 2008/03/03(Mon) 11:20
投稿者やーむー
やーむーと申します。
初めて投稿させていただきます。

タイトルの現象について原因の調査していますが、
行き詰まってしまいました。
分かる方がいらっしゃればご教授願いただけないでしょうか。

【環境】
Windows2000
VB6.0 SP6
コムラッド FD4

【やりたいこと】
 日付入力用のテキストフィールドで表示時と入力時で表示を変更したい。
 入力時:20080303
 表示時;2008/03/03

【不具合現象】
 テキストフィールドに対してフォーカスのIn/Outを高速(手動で行える程度)で
 繰り返すと入力した値が壊れます。

【現在の実装イメージ】
 【ゲットフォーカス】
  入力桁数が10文字の場合("/"で編集されている場合)は以下の処理を行う。
   テキストフィールドの日付から"/"を削除して表示する。
   数字以外の文字を入力不可に設定する。(コムラッドのプロパティで設定)
   入力最大桁数を8桁に設定する
   例:2008/03/03 → 20080303
  入力桁数が10文字以外の場合は何も処理しません。

 【ロストフォーカス】
  全桁(8文字)入力されていた場合は以下の処理を行う。
   全ての文字を入力可能に設定する。(コムラッドのプロパティで設定)
   入力最大桁数を10桁に設定する
   テキストフィールドの日付を"/"区切りで表示する。
   例:20080303 → 2008/03/03
  全桁(8桁)入力されていない場合は何も処理しません。

私の認識ではVB6.0はマルチスレッド的な動作はしないはずなのですが、
ログを入れて調査した結果では同時に動くパターンや、
ロストフォーカスのイベントが動かず、ゲットフォーカスのイベントのみ
連続で動くパターンなどがありました。

よろしくお願いします。

[ツリー表示へ]
タイトル解決しました
記事No11614
投稿日: 2008/03/03(Mon) 16:15
投稿者やーむー
原因はGetFocusで使用している処理の中でDoEventsを行っていたため、
GetFocus中にLostFocusが動作していたためでした。
やっぱり、並列には動かないんですね。(^^;A
お騒がせしました。

[ツリー表示へ]