0

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

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

4

1 回答 1

0

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

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

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

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

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

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

于 2011-07-10T15:25:56.247 回答