gpt4 book ai didi

validation - Delphi设置无固定字符长度的Edit Mask

转载 作者:行者123 更新时间:2023-12-03 15:11:00 27 4
gpt4 key购买 nike

我有一个 TValueListEditor 类型的对象,其中包含 Key 列中某个函数的某些参数,以及用于测试该函数的相应值列的输入。我已根据参数应有的数据类型向值输入添加了编辑掩码。例如参数Num1是int类型,所以输入只能是数字,但是由于我事先不知道确切的位数,有没有办法指定EditMask而不需要固定字符长度?

如果你看下面的代码,如果我需要一个 float 类型的值,我必须有一个点,但我不希望在那个确切位置预定义该点。

    if parser.sParams.Values[parser.sParams.Names[i]]='float' then
begin
lstValParamValues.ItemProps[parser.sParams.Names[i]].EditMask:='#########.#';
end

也许我应该在 EditMask 上实现类似正则表达式的东西?或者还有其他方法来实现值输入的验证吗?

最佳答案

根据 TItemProp.EditMask documentation :

Validation using the EditMask property is performed on a character-by-character basis.

所以只能使用固定宽度的掩码。这意味着您必须指定小数点的位置,以及接受多少个前导和尾随数字。

考虑使用 TValueListEditor.OnValidate事件替代:

Occurs when focus shifts away from a cell in the value list editor.

Write an OnValidate event handler to validate any edits the user enters in a cell before focus leaves it. OnValidate gives applications an opportunity to provide more validation than the EditMask property of the corresponding TItemProp object can supply.

OnValidate only occurs if the user edited the value of the cell that is about to lose focus. The OnValidate event handler can verify the value the user supplied, and if it is not acceptable, raise an exception.

例如:

uses
SysConsts;

procedure TMyForm.lstValParamValuesValidate(Sender: TObject; ACol, ARow: Integer; const KeyName: String; const KeyValue: String);
var
ValueType: string;
sIgnored: Single;
dIgnored: Double;
begin
if KeyValue = '' then Exit;

ValueType := parser.sParams.Values[KeyName];

if ValueType = 'int' then
StrToInt(KeyValue)

else if ValueType = 'float' then
begin
if not TryStrToFloat(KeyValue, sIgnored) then
raise EConvertError.CreateFmt(SInvalidFloat, [KeyValue]);
end

else if ValueType = 'double' then
begin
if not TryStrToFloat(KeyValue, dIgnored) then
raise EConvertError.CreateFmt(SInvalidFloat, [KeyValue]);
end

// etc...
end;

关于validation - Delphi设置无固定字符长度的Edit Mask,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40913023/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com