停止编辑框中的某些键

时间:2012-07-31 08:55:06

标签: delphi browser

所以我已经有了代码。但是当它运行时它不允许退格键,我需要它来允许退格键并删除空格键,因为我不想要空格。

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

3 个答案:

答案 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