Delphi- 制作一个编辑框,在按键事件中只接受小于或等于 (<=) 12 的数字
Delphi- Make a EditBox to accept only numbers lessthan or equal to(<=) 12 on Keypress event
我有一个编辑框,我试图让它只接受 0 到 12 之间的数字。我写了一个这样的 onExit 处理程序:
procedure TfrmCourse.edtDurationExit(Sender: TObject);
begin
if not string.IsNullOrEmpty(edtDuration.Text) then
begin
if StrToInt(edtDuration.Text) > 12 then
begin
edtDuration.Clear;
edtDuration.SetFocus;
end;
end;
end;
...但我想在输入 时检查此 。 TEdit 应该只接受数字输入并在值 > 12 时发出警告。
我为这个问题提出的答案是
最终答案
procedure TfrmCourse.edtDurationKeyPress(Sender: TObject; var Key: Char);
var
sTextvalue: string;
begin
if Sender = edtDuration then
begin
if (Key = FormatSettings.DecimalSeparator) AND
(pos(FormatSettings.DecimalSeparator, edtDuration.Text) <> 0) then
Key := #0;
if (charInSet(Key, ['0' .. '9'])) then
begin
sTextvalue := TEdit(Sender).Text + Key;
if sTextvalue <> '' then
begin
if ((StrToFloat(sTextvalue) > 12) and (Key <> #8)) then
Key := #0;
end;
end
end;
end;
如果输入的字符不是数字,转换函数 StrToInt()
会引发 EConvertError
。您可以通过设置 TEdit.NumbersOnly
属性 来处理这个问题。我建议改用 TryStrToInt()
函数(或另外使用)。虽然你说你想在输入时检查 我也建议使用 OnChange
事件,因为它也会通过从剪贴板粘贴来捕获错误输入。
procedure TForm5.Edit1Change(Sender: TObject);
var
ed: TEdit;
v: integer;
begin
ed := Sender as TEdit;
v := 0;
if (ed.Text <> '') and
(not TryStrToInt(ed.Text, v) or (v < 0) or (v > 12)) then
begin
ed.Color := $C080FF;
errLabel.Caption := 'Only numbers 0 - 12 allowed';
Exit;
end
else
begin
ed.Color := clWindow;
errLabel.Caption := '';
end;
end;
errLabel
是编辑框附近的一个标签,用于提示用户输入错误。
我有一个编辑框,我试图让它只接受 0 到 12 之间的数字。我写了一个这样的 onExit 处理程序:
procedure TfrmCourse.edtDurationExit(Sender: TObject);
begin
if not string.IsNullOrEmpty(edtDuration.Text) then
begin
if StrToInt(edtDuration.Text) > 12 then
begin
edtDuration.Clear;
edtDuration.SetFocus;
end;
end;
end;
...但我想在输入 时检查此 。 TEdit 应该只接受数字输入并在值 > 12 时发出警告。
我为这个问题提出的答案是
最终答案
procedure TfrmCourse.edtDurationKeyPress(Sender: TObject; var Key: Char);
var
sTextvalue: string;
begin
if Sender = edtDuration then
begin
if (Key = FormatSettings.DecimalSeparator) AND
(pos(FormatSettings.DecimalSeparator, edtDuration.Text) <> 0) then
Key := #0;
if (charInSet(Key, ['0' .. '9'])) then
begin
sTextvalue := TEdit(Sender).Text + Key;
if sTextvalue <> '' then
begin
if ((StrToFloat(sTextvalue) > 12) and (Key <> #8)) then
Key := #0;
end;
end
end;
end;
如果输入的字符不是数字,转换函数 StrToInt()
会引发 EConvertError
。您可以通过设置 TEdit.NumbersOnly
属性 来处理这个问题。我建议改用 TryStrToInt()
函数(或另外使用)。虽然你说你想在输入时检查 我也建议使用 OnChange
事件,因为它也会通过从剪贴板粘贴来捕获错误输入。
procedure TForm5.Edit1Change(Sender: TObject);
var
ed: TEdit;
v: integer;
begin
ed := Sender as TEdit;
v := 0;
if (ed.Text <> '') and
(not TryStrToInt(ed.Text, v) or (v < 0) or (v > 12)) then
begin
ed.Color := $C080FF;
errLabel.Caption := 'Only numbers 0 - 12 allowed';
Exit;
end
else
begin
ed.Color := clWindow;
errLabel.Caption := '';
end;
end;
errLabel
是编辑框附近的一个标签,用于提示用户输入错误。