質問: "") MessageBox(_T("Edit2が空です")); } /********************************************************/ ``` どんな機能を想定しているか ------------- 複数エディットを必須入力とし、各エディットに値が必ず入力されている状態を作りたいです。 DBに値を登録することを考えていて、登録ボタンを押したときに各エディットに値が入力されているか確認してエラーを出力することしかできません・・・ しかし、エディットのフォーカスを抜けたときにチェックするほうがユーザーにとって優しいと思うのでどうにか実現したいです。
回答: どうやら`OnKillfocusEditX()`関数の中で`MessageBox()`を呼び出してメッセージダイアログを表示しているのが原因のようです。 表示されている順番はエディット1メッセージ→エディット2メッセージで、後から表示された方が人間の目には手前に見えるので先にエディット2メッセージが表示されていて、後からエディット1メッセージが表示されたように見えるのでしょう。 `MessageBox()`を`OutputDebugString()`に変えてVisual Studio IDEの出力ウィンドウにどう表示されるか試してみてください。 それから、元々の処理でもあるいは`OutputDebugString()`に変えたとしても、`OnKillfocusEditX()`関数の中にブレークポイントを設定して処理を止めているかどうかで動作が変わるかもしれません。 ブレークポイントの有無を変えて試してみるのも良いでしょう。 そういう意味では、KillFocus等のフォーカスが切り替わるタイミングの処理でメッセージダイアログ表示等の入力フォーカスが切り替わる処理は行ってはいけないと思われます。 目標のためには、画面上にスタティックテキスト等を配置して、それに目立つエラーメッセージが表示されるように色や大きさ等視覚効果を工夫してみるとか? ただその表示を止めるのに別の操作が必要(とオペレータが感じてしまう)だと、そのためにまたKillFocusイベントが発生してしまうといったおかしな処理チェインが出来てしまう可能性もありますので、不足時・エラー時を含めた一連の処理・操作の流れがどうなるか考えた方が良いでしょう。