非常に単純な質問かもしれませんが、私は Delphi に触れたことがありません。編集ボックスがあり、文字を受け入れることができます。しかし、いくつかの特別な条件で、編集ボックスの文字が数字だけであることを確認する必要があります。
どうすればそれができますか?
注: ユーザーは任意の文字を入力できますが、検証時に上記の文字を確認する必要があります。
検証を呼び出すためにどのイベントを使用するのかわかりませんが、検証は次のように実行できます。
if TryStrToInt(Edit1.Text, Value) then
DoSomethingWithTheNumber(Value)
else
HandleNotANumberError(Edit1.Text);
ユーザーに文字の入力を許可し、後で検証を通過させない理由がわかりません。
本当に侵入をブロックする必要がある場合は、これを自分でハッキングするよりも、これを行うコントロールの方が優れています。お使いの Delphi のバージョンが非常に古い場合は、JVCL: TJvValidateEdit を JVCL コンポーネント ライブラリ (たとえば、すべてのバージョンの Delphi) で試してみてください。ただし、通常の最近の Delphi バージョン (2009 以降) では、TMaskEdit や TSpinEdit など、いくつかの可能なソリューションが既に組み込まれています。
本当に検証メソッドのみを記述する必要がある場合は、正規表現またはハンドコーディングされた検証関数の使用を検討し、そのコードをコントロールから分離してください。
// Taking OP question obsessively literally, this
// function doesn't allow negative sign, decimals, or anything
// but digits
function IsValidEntry(s:String):Boolean;
var
n:Integer;
begin
result := true;
for n := 1 to Length(s) do begin
if (s[n] < '0') or (s[n] > '9') then
begin
result := false;
exit;
end;
end;
end;
しかし、いくつかの特別な条件では、編集ボックスの文字が数字だけであることを確認する必要があります。
2つの編集コントロールが必要です。1つは数値のみの値用で、もう1つはallow-all値用です。条件に一致するコントロールを有効または無効にします。2つのコントロールに適切なキャプション(およびおそらくヒント、コントロールが有効または無効になっている理由)がある場合、ユーザーは何を入力する必要があるのか、そしてその理由を知ることができます。
aarrgghh :-)
単純なデータ入力フォームの場合、次のようにします。間違った入力を許可しますが、無効な入力を使用して編集コントロールごとにフォントの色を赤に切り替えます(空の値が許可されていない場合、赤のフォントの色では不十分です)。ユーザーがデータを投稿しようとすると、すべての無効な入力フィールドについてユーザーに通知し、投稿を中止する1つのエラーメッセージを表示します。
私はあなたが言ったことを知っていますuser can enter any char but at the time of validation
。
ただし、ユーザーが値を入力できるようにするのは非常にばかげているように思われるため、代替案を提供したいと思います。1分後にユーザーに文句を言うだけです。それはいいにおいがするだけです... 良くありません。
数字以外の入力は禁止します。
特に簡単な整数がある場合:
編集ボックスの OnKeyPress イベントを入力します。
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char) ;
begin
if not(Key IN ['0'..'9', #8, #9, #13, #27, #127]) then key:= #0;
end;
これにより、数値ではないものはすべて削除されます。
負の数を許可する場合は、-
が以前に入力されていないかどうかを確認するために追加のチェックが必要になります。
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char) ;
var
Edit1Text: string;
begin
if (Key = '-') and Pos('-',Edit1.Text) = 0 then begin
Edit1.Text:= '-' + Edit1.Text; //Force the '-' to be in the front.
end
else if (Key = '-') and Pos('-',Edit1.Text) <> 0 then begin //else flip the sign
Edit1Text:= Edit1.Text;
Edit1.Text:= StringReplace(Edit1Text, '-', '',[]);
end;
if not(Key IN ['0'..'9', #8, #9, #13, #27, #127]) then key:= #0;
end;
ユーザーは編集ボックスにデータを貼り付けることもできるため、編集でテキストを変更したときにデータを確認する必要があります。
これは ONKeyPress イベントではかなり厄介になるため、この種のチェックを行い、ユーザーが編集ボックスに口の中に入力するのを防ぐカスタム編集コンポーネントを使用します。
個人的には、エラー メッセージを発行する必要はないと考えています。そもそも、ユーザーが無効なデータを入力できないようにする必要があります。