【问题标题】:How to put a ShowMessage if conditional evaluates to false?如果条件评估为假,如何放置 ShowMessage?
【发布时间】:2014-07-09 06:39:18
【问题描述】:

我正在尝试在我的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;

【问题讨论】:

  • 告诉我们会发生什么以及您期望会发生什么,以便我们为您提供帮助。
  • 看起来好像begin 缺少else 子句。这真的是您的确切代码吗?到底是什么问题?
  • 我更正了您的缩进。从外观上看,abort 语句将在第一次执行循环后触发。它不是 else 块的一部分。
  • 抱歉耽搁了,@Ravaut123 的答案正是我想要的。

标签: delphi if-statement listbox


【解决方案1】:

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

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;

【讨论】:

【解决方案2】:

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 是一种相当严厉的反应。我会删除它。

【讨论】:

  • 我同意这一点,break 会比abort 好得多。
  • 我可能错了,但是不能选择多个项目吗?在这种情况下,Break 也是错误的。
  • 确实如此。在这种情况下,建立一个列表并显示一条带有错误和重复列表的消息可能是有意义的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-23
相关资源
最近更新 更多