问题描述
我使用 InputQuery 来捕获用户的值,但它必须只是一个整数 (from 1 to 9999999...)
,不是小数,也不是字符串(不是 ABCDEF
)或不是字母数字({{ 1}}) 而不是特殊字符 (A1B2C3
)。在德尔福`RAD STUdio 2010 中。
作用域是捕获值,然后显示一条消息,告诉用户如果是这样,他必须只输入有效值。
我怎样才能做到这一点?
解决方法
这很简单:
var
s: string;
i: Integer;
begin
if InputQuery(Caption,'Please enter a positive integer:',s) then
if TryStrToInt(s,i) and (i > 0) then
ShowMessage('An excellent choice,sir!')
else
ShowMessage('That''s not a positive integer,is it?')
如果用户取消它(这是预期的),这将显示提示并且不执行任何操作。另一方面,如果用户确实输入了一个值,则会使用 TryStrToInt
和简单的符号测试进行验证。
请注意,由于布尔短路求值,第二个连接词 (i > 0
) 只会在第一个连接词 (TryStrToInt(s,i)
) 求值为 True
时才求值,因此我们永远不会测试一个未初始化的变量 i
(不过在这种情况下它并不重要)。
您可能还想使用 a more sophisticated input box 自动验证对话框中的输入(免责声明:我的网站)。
或者,您可以使用 InputQuery
函数自己的验证功能,该功能将在用户单击“确定”时验证输入:
var
s: array of string;
i: Integer;
begin
SetLength(s,1);
if InputQuery(Caption,['Please enter a positive integer:'],s,function(const Values: array of string): Boolean
begin
Result := (Length(Values) = 1) and TryStrToInt(Values[0],i) and (i > 0);
if not Result then
ShowMessage('That''s not a positive integer,is it?')
end)
then
ShowMessageFmt('You chose %d. That''s an excellent choice,sir!',[i]);