mfc CEdit 我应该什么时候做验证?
mfc CEdit when should I do validation?
那么根据标题,我应该什么时候对 CEdit(文本框)进行验证?
背景:我被调到我们公司的一个新开发组,他们的做法是按回车键,那是他们在 CEdit(mfc 对话框)上进行验证的时候。而我来自 .net,特别是 WinForms,那里有 Validated
和 Validating
事件,每个开发人员都会看到并意识到这是您应该进行验证的正确事件。
我的详细问题是:
我应该按照他们的做法(按回车键)吗?
或者我想到的是使用 EN_KILLFOCUS
(对上述事件来说是 close/related)?或者两者都不正确,是否有更适合验证的事件?
我需要你的建议,因为如果要问我的 co-devs,他们都会立即说我应该在按 enter 时处理验证。谢谢!
1) MFC 为许多数据类型提供验证工具。这取决于您要在该控件中输入的数据类型。可以使用这个设施吗?
在我看来,EN_KILLFOCUS 是一个更好的选择,因为如果用户没有按 enter 键并按 tab 键转到下一个控件,将如何验证?您仍然可以与同行讨论这个问题并得出结论,哪个地方是处理验证的更好地方。
即使在我的公司,我们也有两个派对。
第一方严格说信息只有在按下 Enter 时才有效,所以在所有信息可用的那一刻。如果你有一堆相互影响的信息,这种方法很容易。 MFC DoDataExchange 方法是他们的最爱。
第二方说:信息必须尽早验证。当每个值几乎独立时,我认为这种方法是可以的。在这种情况下,您检查 EN_CHANGE 或 EN_KILLFOCUS 上的所有数据并禁用确定按钮,直到所有数据都有效。
第二种方法的缺点是,在输入数据的那一刻,你必须给用户更多的信息,引导他更正数据。第一种方法可能会在一条错误消息中说明问题。
我在我的程序中使用了这两种方法。在大多数情况下,我们使用第一种方法,因为我们发现,包含详细信息的综合错误消息更易于维护和用户理解,因为当他们看到对话框时无法访问已启用的 OK 按钮。 ..
顺便说一句:我讨厌可以输入负数但只允许输入正数的对话框。始终使用您可以获得的正确和最佳输入字段,以获得最佳指导。所以 MFC 方法在按回车后说 "Out of range" 不是一个好的解决方案。如果您有最小值和最大值,您甚至可以在用户输入后直接更正该值。
但是这个答案和问题往往是基于意见的。
无论您决定做什么,都应该尽量减少对用户工作流程的干扰。同时,您需要与用户对验证行为的期望保持一致。不要让您的偏见以一种导致用户混淆的方式影响对话行为,或者导致额外的时间使用对话。要记住的最重要的事情是与您采用的任何方法保持一致。
那么根据标题,我应该什么时候对 CEdit(文本框)进行验证?
背景:我被调到我们公司的一个新开发组,他们的做法是按回车键,那是他们在 CEdit(mfc 对话框)上进行验证的时候。而我来自 .net,特别是 WinForms,那里有 Validated
和 Validating
事件,每个开发人员都会看到并意识到这是您应该进行验证的正确事件。
我的详细问题是:
我应该按照他们的做法(按回车键)吗?
或者我想到的是使用 EN_KILLFOCUS
(对上述事件来说是 close/related)?或者两者都不正确,是否有更适合验证的事件?
我需要你的建议,因为如果要问我的 co-devs,他们都会立即说我应该在按 enter 时处理验证。谢谢!
1) MFC 为许多数据类型提供验证工具。这取决于您要在该控件中输入的数据类型。可以使用这个设施吗?
在我看来,EN_KILLFOCUS 是一个更好的选择,因为如果用户没有按 enter 键并按 tab 键转到下一个控件,将如何验证?您仍然可以与同行讨论这个问题并得出结论,哪个地方是处理验证的更好地方。
即使在我的公司,我们也有两个派对。
第一方严格说信息只有在按下 Enter 时才有效,所以在所有信息可用的那一刻。如果你有一堆相互影响的信息,这种方法很容易。 MFC DoDataExchange 方法是他们的最爱。
第二方说:信息必须尽早验证。当每个值几乎独立时,我认为这种方法是可以的。在这种情况下,您检查 EN_CHANGE 或 EN_KILLFOCUS 上的所有数据并禁用确定按钮,直到所有数据都有效。
第二种方法的缺点是,在输入数据的那一刻,你必须给用户更多的信息,引导他更正数据。第一种方法可能会在一条错误消息中说明问题。
我在我的程序中使用了这两种方法。在大多数情况下,我们使用第一种方法,因为我们发现,包含详细信息的综合错误消息更易于维护和用户理解,因为当他们看到对话框时无法访问已启用的 OK 按钮。 ..
顺便说一句:我讨厌可以输入负数但只允许输入正数的对话框。始终使用您可以获得的正确和最佳输入字段,以获得最佳指导。所以 MFC 方法在按回车后说 "Out of range" 不是一个好的解决方案。如果您有最小值和最大值,您甚至可以在用户输入后直接更正该值。
但是这个答案和问题往往是基于意见的。
无论您决定做什么,都应该尽量减少对用户工作流程的干扰。同时,您需要与用户对验证行为的期望保持一致。不要让您的偏见以一种导致用户混淆的方式影响对话行为,或者导致额外的时间使用对话。要记住的最重要的事情是与您采用的任何方法保持一致。