SetFocus 和 KillFocus
Posted
技术标签:
【中文标题】SetFocus 和 KillFocus【英文标题】:SetFocus and KillFocus 【发布时间】:2018-07-16 14:14:04 【问题描述】:我的对话框中有一个CMFCTabCtrl
,我的CMFCTabCTrl
有两个标签。
第一个标签有一个CComboBox
,第二个标签也有一个CComboBox
。
在第一个选项卡的 ComboBox 中新添加的任何项目都将反映在第二个选项卡的 ComboBox 中。同样,在第二个选项卡的 ComboBox 中新添加的任何项目都将反映在第一个选项卡的 ComboBox 中。
为此,我将所有 ComboBox 项放在一个向量中,并且在每个对话框的 WM_SETFOCUS
事件中,我将项添加到 ComboBox。
当用户在 ComboBox 中键入内容但随后用户选择另一个控件或对话框/选项卡时,我也将该项目添加到 ComboBox。为此,我在父对话框 OnCommand
中跟踪 CBN_KILLFOCUS
并将项目添加到 ComboBox。
现在我的问题是,当用户在 ComboBox 中键入内容并单击第二个选项卡时,首先调用第二个选项卡的 SetFocus
,然后仅调用带有 CBN_KILLFOCUS()
消息的 OnCommand。因此,第二个选项卡没有第一个选项卡新添加的项目,而第一个选项卡有该项目。
如何使 ComboBox 项目在显示之前对第二个选项卡可用。
【问题讨论】:
WM_KILLFOCUS is the wrong time to do field validation。不是相同的用例,但基本原则也适用于此。您只是在使用错误的消息来执行操作。但由于您是在询问您的解决方案(而不是您真正试图解决的问题),因此很难提出建议。 除了IInspectable的评论:阅读this 【参考方案1】:如果我在 AFX_WM_CHANGING_ACTIVE_TAB 上做必要的操作(无论我在 killfocus 上做什么),我就能达到我的要求。
【讨论】:
以上是关于SetFocus 和 KillFocus的主要内容,如果未能解决你的问题,请参考以下文章
是否有内置的 MS Access VBA 事件来简化数据验证和 SetFocus
WM_SETFOCUS和WM_KILLFOCUSWM_GETDLGCODE
WM_SETFOCUS和WM_KILLFOCUSWM_GETDLGCODECM_ENTER