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上单击取消,它会取消该过程而不创建按钮?
答案 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
以获得所需的行为。