1

ユーザーが数字を入力できる 7 つの編集があります。数字は 1100 から 1500 の間である必要があります。最初に、最初の編集がフォーカスされ、ユーザーは自分の番号を入力し、タブを押して次の編集にフォーカスします。 ..

私のプログラムは、ユーザーが入力した番号を検証する必要があり、条件 (1100) を満たさない場合

Edit1Change でこのコードを試しましたが、うまくいきません

If (1500 < (strtofloat(edit1.text)) or (strtofloat(edit1.text) <1100) then
begin
  Showmessage ('my message');
  edit1.setfocus
end;

アップデート

申し訳ありませんが、問題の説明があまり明確ではなく、英語もあまり上手ではありません。

比較や条件のチェックに問題はありません。条件が満たされていない場合でも、TAB を押して次の編集を選択すると、メッセージが表示Edit1.Textされ、0 にリセットされ、カーソルが次の編集コントロール。私が欲しいのは、ユーザーが Tab を押し、入力された数字が条件を満たさない場合、メッセージが表示され、 Edit1.Text0 を取り、カーソルが Edit1 にとどまることです。

条件のチェックと同じ編集にフォーカスを与える指示を配置しようとしましたEdit1.OnExitが、うまくいきません。ユーザーが条件を満たさない数値を入力した後に Tab を押すと、常にメッセージが表示されます。 、最初の編集は 0 を取り、カーソルは次の編集に移動します。

4

4 に答える 4

1

ナビゲーション キー ( Tab、BackTab、矢印キーなど) は、キーボード イベントを生成しないため、KeyPreview の影響を受けません。
この事実を指摘する唯一の場所。Delphi ヘルプ TCustomForm.KeyPreview

使用できる唯一のイベントは、次または前の TEditのKeyUpイベントです。

例については、こちらをご覧ください: KeyPress イベントで TAB キーをインターセプトするための回答

于 2013-10-30T15:36:44.233 に答える
0

次に、タブを押して次の編集にフォーカスします

OnExitこれは、イベントhttp://docwiki.embarcadero.com/Libraries/XE2/en/Vcl.Controls.TWinControl.OnExitによってインターセプトされます。

Edit1Change でこのコードを試しましたが、うまくいきません

「うまくいかない」とはどういう意味ですか?

これは実際に機能します。テキストをキー入力している編集に継続的にフォーカスを設定します。ただし、これは変更を確認するのに適していません。ユーザー "1100" から "1500" の場合、ユーザーの中間結果はおそらく "100" または "15100" になり、アプリケーションがモーダル ダイアログによって作業をクラッシュさせる可能性があります。

編集中のチェックは避け、編集後にのみチェックする必要があります。または、干渉しない非モーダルな方法でチェックの結果を表示して、ユーザーが編集を続行できるようにする必要があります。TEdit の背景を赤と緑の間で変更したり、バリデータ ライブラリを使用してエラー マークを追加したりします。

または、組み込みの最小値、最大値、およびチェック機能を備えた数値エディターを使用するだけです

于 2013-10-29T11:48:37.370 に答える