我想在 TEdit 中格式化##.###.###-#
,我使用以下代码:
procedure TfrmPropiedad.edtRUTChangeTracking(Sender: TObject);
var
texto, digito: string;
begin
with Sender as TEdit do
begin
if Length(Text) > 1 then
begin
texto := ReplaceStr(ReplaceStr(Text, '.', ''), '-', '');
if Length(texto) > 1 then
begin
digito := Copy(texto, Length(texto), 1);
texto := FormatFloat(',0', StrToFloat(Copy(texto, 1, Length(texto) - 1)));
texto := ReplaceStr(texto, ',', '.');
texto := texto + '-' + digito;
OnChangeTracking := nil;
Text := '';
Text := AnsiUpperCase(texto);
OnChangeTracking := edtRUTChangeTracking;
GoToTextEnd;
end;
end;
end;
end;
但GotoTextEnd
并不总是有效。
答案 0 :(得分:0)
问题是您在OnChange中放置的代码在编辑组件的新文本中设置,并通过引发新的OnChange事件。如果您将代码移动到ChangeTracking事件,那么它可以工作:
procedure TForm15.edtRUTChangeTracking(Sender: TObject);
var
texto, digito: string;
begin
with Sender as TEdit do
begin
if Length(Text) > 1 then
begin
texto := String(Text).Replace('.', '').Replace( '-', '');
if Length(texto) > 1 then
begin
digito := Copy(texto, Length(texto), 1);
texto := FormatFloat(',0', StrToFloat(Copy(texto, 1, Length(texto) - 1)));
texto := texto.Replace(',', '.');
texto := texto + '-' + digito;
OnChangeTracking := nil;
Text := '';
Text := AnsiUpperCase(texto);
OnChangeTracking := edtRUTChangeTracking;
GoToTextEnd;
end;
end;
end;
end;