2012-05-04 71 views
2

我已(利用從CPropertySheet/CPropertyPage派生BCGSoft類)創建的基於CPropertySheet模態對話框在MFC。當用戶需要在CPropertyPage的中的一個的某一動作,我想以啓用/禁用在不同CPropertyPage的控制。如何確保CPropertyPage在用戶點擊CPropertySheet之前創建?

這只是正常,假設用戶已經點擊選項卡上的實例第二CPropertyPage。但是,MFC會延遲創建第二個CPropertyPage,直到它被用戶激活。在這種情況下,第二個CPropertyPage內的控件不存在,並且MFC會引發錯誤。

爲了解決這個問題,我想通過調用CPropertySheetOnInitDialog()中的必要功能來確保所有的CPropertyPage都存在。有人可以解釋如何做到這一點?

回答

1

調用函數CPropertyPage::SetActivePage()(當然是在一個實際的CPropertyPage對象上)的竅門。

0

這聽起來像你的數據不會從UI(壞事)分開。最好重新設計業務邏輯以將數據與用戶界面分開,這樣即使沒有用戶界面,也可以填充初始數據。

如果你必須這樣做,在OnInitDialog,set the active page to each page in a loop,然後激活默認頁面。

+0

就我而言,純粹是一個用戶界面的便利,可以使複選框在另一個頁面中被檢查,而不是業務邏輯需求。沒有數據正在更改或設置。我可以在數據層中添加一個新屬性(數據層已經存在,當第二個頁面加載/保存時會讀取),並在第二個頁面變爲活動時讀取這些數據,但我寧願不添加不必要的數據到數據層。在這種情況下,我只希望第二頁中的複選框被選中。 –

0

而不是試圖立即啓用控件,做到在頁面的OnActivate方法。

相關問題