如果条件求值为false,如何放置ShowMessage?

时间:2014-07-09 06:39:18

标签: delphi if-statement listbox

我尝试在if检测到已插入另一个列表框的名称的情况下显示消息。这是我到目前为止所尝试的:

procedure TFrmProjetos.buttonaddusersClick(Sender: TObject);
var
  item: string;
  i: integer;
begin
  for i := 0 to listxallusers.Items.Count - 1 do
  begin
    item:= listxallusers.Items[i];
    if listxallusers.Selected[i] and (listtxusersinproj.Items.IndexOf(item) = -1) then
    begin
      listtxusersinproj.Items.Add(item);
    end
    else
      Application.MessageBox('User already record.','Warning!',MB_OK+MB_ICONWARNING);
    Abort;
  end;
end;

2 个答案:

答案 0 :(得分:2)

您也可以循环进入列表并仅在记录中添加不存在的用户,并显示未插入记录中的用户。

procedure TForm1.Button1Click(Sender: TObject);
var
  lstUserRecord: TStringList;
  i: Integer;
begin
  lstUserRecord:= TStringList.Create();
  try
    for i := 0 to listxallusers.Items.Count - 1 do
    begin
      if listxallusers.Selected[i] then
      begin
        if (UserInList(listxallusers.Items[i])) then
        begin
          lstUserRecord.add(listxallusers.Items[i]);
        end;
      end;
    end;
    if (lstUserRecord.count>0) then
    begin
      raise Exception.Create(format('Users already in record: %s',[lstUserRecord.CommaText]));
    end;
  finally
    lstUserRecord.Free;
  end;
end;

function TForm1.UserInList(AUser: String): Boolean;
begin
  Result:= (listtxusersinproj.Items.IndexOf(AUser) > -1);
  if not Result then
  begin
    listtxusersinproj.Items.Add(AUser);
  end
end;

答案 1 :(得分:1)

if子句包含and。这意味着如果其中一个条件为假,即listxallusers.Selected[i]为假,则会发出警告。这就是你想要的吗?

我认为这就是你想要的:

  item:= listxallusers.Items[i];
  if listxallusers.Selected[i] then
  begin
    if listtxusersinproj.Items.IndexOf(item) = -1 then
    begin
      listtxusersinproj.Items.Add(item);
    end
    else
    begin
      Application.MessageBox('User already record.','Warning!',MB_OK+MB_ICONWARNING);
      Abort;
    end;
  end;

就个人而言,我认为Abort是一种非常严厉的反应。我会删除它。