我已经在MFC中创建了一个CPropertySheet-based模式对话框(使用从CPropertySheet /CPropertyPage派生的BCGSoft类)。当用户在某个CPropertyPage中执行某个操作时,我想启用/禁用另一个CPropertyPage中的控件。
假设用户已经在选项卡上单击以实例化第二个CPropertyPage,则可以很好地工作。但是,MFC会延迟第二个CPropertyPage的创建,直到用户激活它。在这种情况下,第二个CPropertyPage中的控件不存在,并且MFC引发错误。
为了克服这个问题,我想通过在CPropertySheet OnInitDialog()中调用必要的函数来确保所有的CPropertyPage都存在。有人能解释一下怎么做吗?
发布于 2012-11-30 21:25:58
调用函数CPropertyPage::SetActivePage() (当然是在实际的CPropertyPage对象上)可以做到这一点。
发布于 2012-05-05 08:08:29
听起来你的数据并没有从UI中分离出来(这是件坏事)。最好重新设计业务逻辑,将数据与UI分开,这样即使没有UI,您也可以填充初始数据。
如果有必要,在OnInitDialog、set the active page to each page in a loop中激活默认页面。
发布于 2012-05-05 10:38:47
而不是尝试立即启用控件,而是在页的OnActivate方法中启用。
https://stackoverflow.com/questions/10457455
复制相似问题