我有一个表格,我有一个有三个值的组合框:90,95和99.我希望用户只选择这三个,如果输入另一个值则引发错误。所以我编写了以下代码来显示警告用户错误的消息。问题是当messageDlg出现并且用户点击" OK"时,整个表单关闭。我希望用户在关闭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;
答案 0 :(得分: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
以禁用编辑值。
答案 1 :(得分:1)
如果您只有三个不同的值,那么最好使用radiobuttons而不是组合框 - 用户被限制为这些值。然后,您不需要关于消息框的可疑代码。
我不会以这种方式处理错误检查。如果对话框中有“确定”按钮,则将错误检查添加到OKBtnOnPress事件中;如果有问题,则将modalresult设置为0.这意味着即使按下OK btn,对话框也不会关闭。
您可以在状态栏上显示错误消息。