如果InputQuery为false,则取消其余的过程

时间:2017-02-10 09:57:32

标签: delphi input

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;

即使用户按下取消,此过程也会在重复循环后继续。我尝试使用CancelCreateButton标签使用GoTo函数InputQuery = False,但我只是出错(所以我删除了一些代码)。

我怎样才能这样做,如果用户在inputquery上单击取消,它会取消该过程而不创建按钮?

3 个答案:

答案 0 :(得分:2)

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

if not InputQuery(...) then
  Abort;

如果您想在循环中执行验证,那么看起来像这样:

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

答案 1 :(得分:1)

您还可以使用Exit功能

答案 2 :(得分:0)

你有太多的InputQuery调用,三个只需要一个;最好将InputQuery的结果捕获到一个布尔变量,并将其用于执行流控制。尝试这样的事情:

procedure TForm1.Button2Click(Sender: TObject);
var
  FSeatButton: TButton;
  Name : String;
  InputOK : Boolean;
  Label
  CancelCreateButton;
begin
  InputOK := InputQuery('Enter Students Name', 'Name', Name);
    // You can add check's on the validity of the student's name 
    // (e.g, is it a duplicate) here and update the value of InputOK 
    // (to False) if you don't want the button creation to go ahead

  if InputOK then begin
    FSeatButton := TButton.Create(self);
    FSeatButton.Parent := self;
    FSeatButton.Left := 100;
    FSeatButton.Top := 100;
    FSeatButton.Width := 59;
    FSeatButton.Height := 25;
    FSeatButton.Caption := (Name);
    FSeatButton.OnMouseDown := ButtonMouseDown;
    FSeatButton.OnMouseMove := ButtonMouseMove;
    FSeatButton.OnMouseUp := ButtonMouseUp;
  end;
end;

假设您为单个学生做了什么,您可以恢复repeat ... until以获得所需的行为。