2011-07-10 168 views
0

当用户单击属性表上的OK或APPLY按钮并且程序确定某页上的数据无效时,如何显示包含错误的页面以及描述错误?属性表数据验证

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

回答

0

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

我是否正确地认为你遍历你的属性表,验证它们并在出现错误时显示一个消息框?因为,当然,如果我在物业第3页上,并且我在物业页面1上的字段中写了废话,你会目睹会发生什么。

最简单的解决方案是,当验证时,记下哪个属性页问题是,如果用户已经写了一个垃圾到你的领域之一,那么就设置一个活动。这似乎是最快的方式。

此外,而不是冒出一个恼人的消息框,预留一些空间的属性页的下方显示一个文本(红色或其他方式)的警告,以为什么,然后更改为相应的属性页,并突出违规控制。您的验证程序可以在循环时很好地执行此操作。

更好的是,不要停在第一个错误。我恨的一件事是纠正一个我认为是唯一问题的领域,每当我点击“确定”或“提交”时就会被告知我还​​有其他错误。

我认真地认为你应该考虑在这里额外的英里...通过所有控件循环,并添加所有无效的列表。然后更改每个有问题的控件的背景颜色,标签颜色等......然后用户可以通过并纠正,无论他或她犯了多少错误。

+0

一些评论编号为您的6段。 2)实际上,属性表遍历发送PSN_APPLY通知的页面。它不超出设置PSNRET_INVALID的页面。 3)设置PSNRET_INVALID会导致属性表切换到相应的页面。 4)看起来像一个合理的解决方案;现在需要决定何时删除该消息。 5)由于PSN_APPLY通知在第一页报告错误时停止,因此难以忽略属性页的功能。 6)同样,困难的部分是决定何时/如何删除错误消息。 –