【问题标题】:property sheet data validation属性表数据验证
【发布时间】:2011-07-10 15:05:20
【问题描述】:

当用户单击属性表上的确定或应用按钮并且程序确定某些页面上的数据无效时,如何使包含错误的页面与描述错误的消息框一起显示?

目前进行验证的过程在处理 PSN_APPLY 通知时执行以下操作。

MessageBox (hDlg, "Data must be positive!", "Error", MB_OK);
SetWindowLong (hDlg, DWL_MSGRESULT, PSNRET_INVALID);

如果当前显示正在执行验证 (A) 的页面,但如果正在显示其他页面 (B),则会出现消息框并显示该页面 (B),然后当消息框被回答时,这可以正常工作,显示验证错误 (A) 的页面。我考虑过设置一些标志,以便当该页面 (A) 收到 PSN_SETACTIVE 通知时,它会显示消息框,但这似乎有点做作。

c++ 中的 Win32 API,没有 MFC,没有 NET,没什么花哨的。

【问题讨论】:

    标签: c++ propertysheet


    【解决方案1】:

    我认为问题在于您的验证设计及其演示。

    我认为您遍历属性表、验证它们并在出现问题时显示消息框是否正确?因为当然,如果我在属性页 3 上并且我在属性页 1 上的某个字段中写了废话,那么您所见证的将会发生。

    最简单的解决方案是,在验证时,请注意相关字段是哪个属性页,如果用户在您的某个字段中写入了废话,则将该属性页设置为活动状态。这似乎是最快的方法。

    另外,与其弹出一个烦人的消息框,不如在属性页下方保留一些空间以显示关于为什么的文本警告(红色或其他),然后切换到适当的属性页,并突出显示有问题的控件。您的验证例程可以在循环过程中轻松轻松地完成此操作。

    更好的是,不要停留在第一个错误上。我讨厌的一件事是更正一个我认为是唯一问题的字段,只是每次我点击“OK”或“SUBMIT”时都会被告知还有我错过的其他内容。

    我真的认为您应该考虑在这里加倍努力...循环所有控件,并将所有无效控件添加到列表中。然后更改每个有问题的控件的背景颜色、选项卡颜色等...然后用户可以完成并更正,无论他或她犯了多少错误。

    【讨论】:

    • 一些 cmets 为您的 6 段编号。 2) 实际上,属性表会遍历发送 PSN_APPLY 通知的页面。它不会超出设置 PSNRET_INVALID 的页面。 3) 设置 PSNRET_INVALID 会导致属性表切换到相应的页面。 4)似乎是一个合理的解决方案;现在需要决定何时删除消息。 5) 如果不忽略属性表的功能,则更难做到,因为 PSN_APPLY 通知会在第一页报告错误时停止。 6) 同样,困难的部分是决定何时/如何删除错误消息。
    猜你喜欢
    • 2011-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-25
    • 1970-01-01
    • 2017-07-07
    • 1970-01-01
    • 2011-01-31
    相关资源
    最近更新 更多