• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:【VC++2005(CLR)】テキストボックスに0を除く整数値の入力を許可したい)

【VC++2005(CLR)】テキストボックスに0を除く整数値の入力を許可したい

このQ&Aのポイント
  • VC++2005(Express Edition)初心者です。CLRでプロジェクトを作成しています。表題の件でよい知恵を頂ければと思い質問させていただきました。
  • 現在、テキストボックスに入力された値が0以外の整数である場合のみ、その値を表示し、0の場合は表示しないようにしたいです。
  • どのようにしたら、テキストボックスに0を除く整数値の入力を許可できますか?

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

「チェックのタイミング」が間違っています。 「内容の変更時」ではなく「テキストボックスから抜け出る時」にチェックを行いましょう。もちろん「内容の変更時」には、何の制限も設けず、好きなように変更させます。 ・テキストボックスの初期値は「正当な文字列が入っている状態」とする。(非0で、"-"単一の入力ではない状態) ・テキストボックスがフォーカスを失う瞬間、入力されている文字列が「正当かどうか」を調べ、不当なら「変更前の値」に書き戻し、テキストボックスにフォーカスを当て直す。入力が正当なら、テキストボックスからフォーカスが外れる。 こうすると「変な文字列が入ったままだと、テキストボックスから抜け出せない」ので「符号だけが放置される」と言う事が起きません。 もし「テキストボックスから抜け出せない」のが困るのであれば「テキストボックスにフォーカスを当て直す」の部分を「テキストボックスの文字列を、テキストボックスがフォーカスを受け取った瞬間の文字列に書き戻す」にしましょう。 つまり「不正な値のままでテキストボックスから出ようとしたら、強制的に変更前の値に戻す」と言う事です。

yuki7091
質問者

お礼

タイミングを「フォーカス」の「Leave」にして 再度やり直したらできました。 ありがとうございました。 素人意見ですが、タイミングでもいろいろと種類があるのですね。 しかも、イベントを発行するタイミングが非常に重要だということを 学びました。 ありがとうございました!

yuki7091
質問者

補足

ご回答、ありがとうございます。 タイミングを「フォーカス」の「Enter」や「Leave」で 以下のコードを埋めても駄目でした。 どうしてでしょうか? int intValue; intValue = CheckNumber(strValue); if(intValue != 0) textBoxMain_Work->Text = intValue.ToString(); else textBoxMain_Work->Text = "";

関連するQ&A