属性表数据验证

时间:2011-07-10 15:05:21

标签: c++ propertysheet

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

目前,执行验证的过程在处理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,没什么特别的。

1 个答案:

答案 0 :(得分:0)

我认为问题出在验证的设计和演示中。

我是否正确地认为您迭代了属性表,验证它们并在出现问题时显示消息框?因为当然,你所见证的将会发生,如果我在第3页的属性上,我在第1页的属性中写了垃圾。

最简单的解决方案是,在验证时,记下相关字段的属性页,并在用户将垃圾写入您的某个字段时将其设置为活动状态。这似乎是最快的方式。

此外,不是弹出恼人的消息框,而是在属性页面下方保留一些空间,以显示关于 why 的文本(红色或其他)警告,然后更改为相应的属性页,并突出显示违规控制。您的验证例程可以在循环时很好地轻松完成。

更好的是,不要停在第一个错误。我讨厌的一件事就是纠正一个我认为唯一的问题,只有在我每次点击“确定”或“提交”时才会被告知我错过了其他的东西。

我认真地认为你应该考虑在这里加倍努力......循环遍历所有控件,并将所有无效的控件添加到列表中。然后更改每个违规控件的背景颜色,标签颜色等......然后,无论他或她做了多少错误,用户都可以完成并更正。