1

我有一个表单,上面有一个包含三个值的组合框:90、95 和 99。我希望用户仅从这三个值中进行选择,并在输入另一个值时引发错误。所以我编写了以下代码来显示一条消息,提醒用户注意错误。问题是当 messageDlg 出现并且用户点击“确定”时,整个表单关闭。我希望用户在关闭 MessageDlg 后能够做出正确的选择。

        if not ((cbPILimits.Text = '90') or
                     (cbPILimits.Text = '95') or
                     (cbPILimits.Text = '99')) then
        begin
          MessageDlg('The PI limit levels can only be 90%, ' +
                     '95% or 99%.  Please choose among these three.',
                     mtError, [mbOK], 0);
          if not (TryStrToFloat(cbPILimits.Text, PIPercent)) then exit;
        end;

        Close;
4

2 回答 2

4

您的表单关闭是因为您Close;在示例代码的末尾有,无论是否执行,它将始终执行MessageDlg()

我假设您只想在用户选择有效值时关闭表单,否则显示消息而不关闭表单。你需要有这样的东西:

    if (not cbPILimits.Text = '90') or
       (not cbPILimits.Text = '95') or
       (not cbPILimits.Text = '99') then
    begin
      MessageDlg('The PI limit levels can only be 90%, ' +
                 '95% or 99%.  Please choose among these three.',
                 mtError, [mbOK], 0);

      // whats the point of line below? seems like obsolete
      if (not TryStrToFloat(cbPILimits.Text, PIPercent)) then Exit;
    end
    else
      Close;

此外,如果您不想让用户手动输入值TComboBox,您可以将TComboBox.Style属性设置csDropDownList为禁用编辑值。

于 2013-10-08T03:12:14.820 回答
1

如果您只有三个不同的值,那么最好使用单选按钮而不是组合框 - 用户受限于这些值。那么你就不需要关于消息框的可疑代码了。

我不会以这种方式处理错误检查。如果您的对话框有一个“确定”按钮,则将错误检查添加到 OKBtnOnPress 事件;如果有问题,则将 modalresult 设置为 0。这意味着即使按下了 OK btn,对话框也不会关闭。

您可以在状态栏上显示错误消息。

于 2013-10-08T03:12:07.950 回答