怎么給DoModal打開一個窗口里的控件賦值


我如果用指針指向一個窗口是可以賦值的, 因為其內存已經分配好, 但有個缺點是用ShowWindow方式來顯示窗口的,不能用DoModal,希望可以用domodal,因為可以在子窗口退出后,把子窗口里的內容賦值到父窗口里,這個代碼直接寫在  dlg.DoModal()后面,會在窗口退出后運行, 而ShowWindow是連續執行完的,不停頓的。

1,  用指針是可以的。其中m_meetSite和m_destSite是列表框控件

CselectSite  selectSite, *pselectSite;

CString  sSiteName;

pselectSite = new CselectSite();
pselectSite->Create(IDD_selectSite,this);

   if(NULL != pselectSite)
   {
//對會場選擇中的會場進行賦值
for (int i=0; i<m_meetSite.GetCount();i++)
{
m_meetSite.GetText(i,sSiteName);
pselectSite->m_destSite.AddString(sSiteName);
}
   }
   pselectSite.ShowWindow(SW_SHOW);

2,但如果用domodal就不可以了,報錯
CselectSite  selectSite, *pselectSite;

CString  sSiteName;

//對會場選擇中的會場進行賦值
for (int i=0; i<m_meetSite.GetCount();i++)
{
m_meetSite.GetText(i,sSiteName);
selectSite.m_destSite.AddString(sSiteName);
}
                  selectSite.DoModal();

8 个解决方案

#1


selectSite.m_destSite.AddString(sSiteName);
這里的添加到字符串操作,是因為你的控件還沒有建立好

放到對話框的初始化函數里

#2


DIALOG在Create或者DoModal調用的時候才初始化控件,所以你在DoModal前調用肯定有問題,可以設置成員變量來保存對話框的值,在OnInitDialog時將他們賦給控件,在OnOK時,從控件賦給變量

#3


要NEW在建立

#4


to: laiyiling(最熟悉的陌生人)
  因為我在主窗口里的是一個ListCtrl控件, 控件有很多行內容,我不可能在子窗口里申明很多變量來接收的, 所以最好的辦法是在主窗口打開的時候就對子窗口賦值,但需要是模式的顯示子窗口

to: snaill() 
  關鍵是如何把不定的記錄集傳入到子窗口里去,不是簡單的一兩個變量,列表框控件里的記錄數是不定的。

#5


如果非得用DoModal方式的話,
要實現你的要求只能把代碼定在OnInitDialog初始中或之后,並在ShowWindow之前
    的這個過程中就可以了。

#6


調用DoModal后再賦值

#7


這種情況,你在dlg內部設置一個結構數組,DoModal之前先設置該數組,然后在dlg的OnInitDialog中根據該結構數組設置List不就可以了嗎?

#8


要看你的數據量,如果可測得話,可以采用List變量傳遞

如果不可測,這要傳遞獲取數據的指針,比如記錄集的指針到Dialog。當然你也可以Dialog中打開數據庫操作

總之方法是多樣的,但在未初始化前調用控件絕對是不允許的



注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com