有没有一种方法可以通过InputBox验证整数的多个输入?

cvxl0en2  于 2022-10-16  发布在  其他
关注(0)|答案(1)|浏览(145)

我基本上是Delphi的新手,我被分配了一项任务,我必须对整数数组进行排序,并验证每一个输入。
我已经通过InputBox()函数获取了数组的输入。其代码如下所示:

procedure TForm1.Button1Click(Sender: TObject);
begin
  for i := 0 to Length(arr)-1 do
  begin
    arr[i] := StrToInt(InputBox('Program to sort integers', 'Enter 5 integers', ''));
  end;

我还尝试放置一个try..except块来捕获错误,但它不能像预期的那样工作。try..except块如下所示:

procedure TForm1.Button1Click(Sender: TObject);
begin
  for i := 0 to Length(arr)-1 do
  begin
    try
      arr[i] := StrToInt(InputBox('Program to sort integers', 'Enter 5 integers', ''));
    except
      ShowMessage('Invalid input');
    end;

问题是,在单击按钮时,会执行上面的OnClick事件处理程序,但不会执行except块。
我现在应该怎么做才能验证输入?
如果您想了解更多关于我的表单组件的信息,那么我已经添加了一个标签、一个用于显示排序数组的列表框和一个按钮(您知道它的名称是Button1)。
先谢谢你。

vecaoik1

vecaoik11#

使用您在评论中显示的OnKeyPress()事件!但是,如果您希望用户只需点击Enter来标记值的结束,您还需要接受#13作为有效密钥。
因此,OnKeyPress事件中的第一个测试变为

if not (Key in [#8, #13, '0'..'9']) then
begin
  Key := #0;
  Exit;
end;

然后你需要处理#13键:(伪代码)

if key = #13 then
begin
  // get the value of entered digits using `StrToInt()` function
  // to generalize, use `TEdit(Sender)` to refer to the current edit control
  // verify value against min and max values
  // if previous test succeeds, 
    // add to array
    // clear the edit control text
  // else show error msg
end

所有其他接受的键都由该控件处理。

相关问题