所以我已经有了代码。但是当它运行时它不允许退格键,我需要它来允许退格键并删除空格键,因为我不想要空格。
procedure TForm1.AEditAKeyPress(Sender: TObject; var Key: Char);
var s:string;
begin
s := ('1 2 3 4 5 6 7 8 9 0 .'); //Add chars you want to allow
if pos(key,s) =0 then begin Key:=#0;
showmessage('Invalid Char');
end;
需要帮助,谢谢:D
答案 0 :(得分:6)
请注意代码中已有的注释:
procedure TForm1.AEditKeyPress(Sender: TObject; var Key: Char);
var s:string;
begin
s := ('1234567890.'#8); //Add chars you want to allow
if pos(key,s) =0 then begin
Key:=#0;
showmessage('Invalid Char');
end;
end;
答案 1 :(得分:3)
最好将允许键设置为常量(速度,优化):
更新了#2 只允许一个十进制字符并正确处理DecimalSeparator。
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
const
Backspace = #8;
AllowKeys: set of Char = ['0'..'9', Backspace];
begin
if Key = '.' then Key := DecimalSeparator;
if not ((Key in AllowKeys) or
(Key = DecimalSeparator) and (Pos(Key, Edit1.Text) = 0)) then
begin
ShowMessage('Invalid key: ' + Key);
Key := #0;
end;
end;
为了获得更好的结果,请查看DevExpress,JVCL,EhLib,RxLib和许多其他库中包含的TNumericEdit组件。
答案 2 :(得分:1)
使用psychic powers,我预测您正在尝试验证浮点值。
您可以使用控件的OnExit事件或表单的Ok / Save工具来检查正确的格式,如下所示:
procedure TForm1.Edit1Exit(Sender: TObject);
var
Value: Double;
begin
if not TryStrToFloat(Edit1.Text, Value) then begin
// Show a message, make Edit1.Text red, disable functionality, etc.
end;
end;
此代码假定您要使用特定于区域设置的小数点分隔符。
如果您只想允许'.'
,则可以将TFormatSettings
记录作为第三个参数传递给TryStrToFloat
。