Delphi 如果InputQuery为false,则取消过程的其余部分 procedure TForm1.按钮2点击(发送方:TObject); 变量 按钮:t按钮; 例如:字符串; 开始 如果{Example='''}InputQuery('在此处放置问题/请求',示例),则 重复 InputQuery(“在此处提出问题/请求”,示例); 如果InputQuery=False,则 中止 其他的 直到示例“”为止//或输入框。 按钮:=TButton.Create(self); Button.Parent:=self; //按钮属性在这里 按钮。标题:=(示例); //任何手续都可以在这里办理 结束;

Delphi 如果InputQuery为false,则取消过程的其余部分 procedure TForm1.按钮2点击(发送方:TObject); 变量 按钮:t按钮; 例如:字符串; 开始 如果{Example='''}InputQuery('在此处放置问题/请求',示例),则 重复 InputQuery(“在此处提出问题/请求”,示例); 如果InputQuery=False,则 中止 其他的 直到示例“”为止//或输入框。 按钮:=TButton.Create(self); Button.Parent:=self; //按钮属性在这里 按钮。标题:=(示例); //任何手续都可以在这里办理 结束;,delphi,input,Delphi,Input,重复循环后,即使用户按下“取消”,此过程仍将继续。如果InputQuery=False,我尝试使用CancelCreateButton标签使用GoTo函数,但我只是得到了错误(因此我删除了一些代码) 如果用户单击inputquery上的cancel(取消),它将取消该过程,而不创建按钮,我如何使它这样做呢?如果按下输入查询表单的cancel(取消)按钮,那么调用inputquery(输入查询)将返回False(错误)。在这种情况下,您应该调用静默异常Abort,以跳过事件处理程序的其余部分 pr

重复循环后,即使用户按下“取消”,此过程仍将继续。如果
InputQuery=False
,我尝试使用
CancelCreateButton
标签使用GoTo函数,但我只是得到了错误(因此我删除了一些代码)


如果用户单击inputquery上的cancel(取消),它将取消该过程,而不创建按钮,我如何使它这样做呢?

如果按下输入查询表单的cancel(取消)按钮,那么调用inputquery(输入查询)将返回False(错误)。在这种情况下,您应该调用静默异常
Abort
,以跳过事件处理程序的其余部分

procedure TForm1.Button2Click(Sender: TObject);
var
  Button: TButton;
  Example : String;

begin

  if {Example = ''} InputQuery('Put a question/request here', Example) then
  Repeat                                                           

    InputQuery('Put a question/request here', Example);

if InputQuery = False then
 Abort
 else
  Until Example <> ''; //or InputBox.


  Button := TButton.Create(self);
  Button.Parent := self;
  //Button properties go here
  Button.Caption := (Example);
  //Any procedures can go here

end;
如果要在循环中执行验证,则如下所示:

if not InputQuery(...) then
  Abort;

如果按下输入查询表单的取消按钮,则对
InputQuery
的调用返回
False
。在这种情况下,您应该调用静默异常
Abort
,以跳过事件处理程序的其余部分

procedure TForm1.Button2Click(Sender: TObject);
var
  Button: TButton;
  Example : String;

begin

  if {Example = ''} InputQuery('Put a question/request here', Example) then
  Repeat                                                           

    InputQuery('Put a question/request here', Example);

if InputQuery = False then
 Abort
 else
  Until Example <> ''; //or InputBox.


  Button := TButton.Create(self);
  Button.Parent := self;
  //Button properties go here
  Button.Caption := (Example);
  //Any procedures can go here

end;
如果要在循环中执行验证,则如下所示:

if not InputQuery(...) then
  Abort;

您还可以使用
退出
功能

您也可以使用
退出
功能

您要输入的调用太多,三个调用只需要一个;最好将InputQuery的结果捕获到一个布尔变量,并将其用于执行流控制。请尝试以下方法:

repeat
  if not InputQuery(..., Name) then
    Abort;
until NameIsValid(Name);

假设这符合您对单个学生的期望,您可以恢复
重复。。。直到
获得您需要的行为。

您有太多的调用要输入查询,三个调用只需要一个;最好将InputQuery的结果捕获到一个布尔变量,并将其用于执行流控制。请尝试以下方法:

repeat
  if not InputQuery(..., Name) then
    Abort;
until NameIsValid(Name);


假设这符合您对单个学生的期望,您可以恢复
重复。。。直到
获得所需的行为。

如果用户在GUI事件处理程序中取消,请调用中止@DavidHeffernan我已尝试在重复循环中调用中止,是否应该在其他地方执行?重复输入查询('输入学生姓名'、'姓名');如果InputQuery=False,则中止else,直到名称为“”;我正在查看代码,我看不到调用
中止
。@DavidHeffernan如果我删除了它,我将编辑问题以显示我将它放在哪里,我将还原您的编辑。回答完问题后请不要改变。如果您有新问题,请以新问题的形式提问。然而,既然你似乎不愿意听答案,我建议你不要费心问。这只是浪费每个人的时间。如果用户在GUI事件处理程序中取消,请调用
Abort
@DavidHeffernan我已经尝试在重复循环中调用Abort,我应该在其他地方执行吗?重复输入查询('输入学生姓名'、'姓名');如果InputQuery=False,则中止else,直到名称为“”;我正在查看代码,我看不到调用
中止
。@DavidHeffernan如果我删除了它,我将编辑问题以显示我将它放在哪里,我将还原您的编辑。回答完问题后请不要改变。如果您有新问题,请以新问题的形式提问。然而,既然你似乎不愿意听答案,我建议你不要费心问。这只是浪费每个人的时间。其余的程序仍在进行,而按钮仍在生产。没有。当然,我假设您没有定义自己版本的
Abort
,它隐藏了
System.Abort
。这是您需要提供的。我只是把它放在那里作为一个占位符。它和我在答案中写的一样完美。我建议你放慢脚步,多想想。将
NamesIsValid(Name)
替换为名称有效的测试。如果你做不到这一点,那你就有大麻烦了。我不明白你为什么坚持中止。在这种情况下,
退出就可以了。如果要将代码提取到另一个方法中,则将整个代码从事件处理程序提取到一个新方法中。过程的其余部分将继续进行,按钮仍在生成中。没有。当然,我假设您没有定义自己版本的
Abort
,它隐藏了
System.Abort
。这是您需要提供的。我只是把它放在那里作为一个占位符。它和我在答案中写的一样完美。我建议你放慢脚步,多想想。将
NamesIsValid(Name)
替换为名称有效的测试。如果你做不到这一点,那你就有大麻烦了。我不明白你为什么坚持中止。在这种情况下,
退出就可以了。如果您想将代码提取到另一个方法中,那么可以将整个代码从事件处理程序提取到一个新方法中。但是
Abort
更好。有时,您会将代码提取到另一个方法中,然后
exit
仅退出该方法<代码>中止
对此类更改具有鲁棒性。退出和功能结果+1。中止是可以的,但它是一种更先进的技术,我怀疑询问者是否有足够的德尔福知识,是否愿意投资于此。特别是关于这个问题