我正在制作一个MFC项目。在主对话框中,有一个按钮可以打开一个用户输入的子对话框。然后,当在子框中单击“确定”时,此数据将设置为父对话框中的变量。这一切都完美无缺。
现在,子框中的文本框初始化为子对话框的OnInitDialog()中的预设值。我希望这些值初始化为它们在当前父对话框中连接的变量。
因此,例如,我有一个文本框,设置在名为sampleCount的整数变量中。在我的子对话框中(只显示此变量的代码)
void ChildBox::DoDataExchange(CdataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Text(pDX, IDC_SAMPCOUNT, sampCnt);
}
BOOL FNameIn::OnInitDialog()
{
CDialog::OnInitDialog();
GetDlgItem(IDC_SAMPCOUNT)->SetWindowTextA("1");
return TRUE;
}
然后在父对话框中我有
void ParentDialog::OnInput()
{
ChildBox dlg;
if (dlg.DoModal() == IDOK)
{
sampleCount = dlg.sampCnt;
}
}
正如我所说,这段代码都可以,但是每次打开ChildBox时,sampleCount文本框都设置为1.如果我键入20,然后点击确定并将ParentDialog中的sampleCount变量设置为20我希望它下次打开子对话框时,在文本框中显示20。该变量也可以由ParentDialog中的另一个函数自动设置,因此在子对话框中输入的最后一个值并不总是正确的,它需要使用当前ParentDialog中变量sampleCount的值。
我觉得这应该是非常直接的,但我无法弄明白,谢谢你的帮助。
答案 0 :(得分:1)
修改子对话框的构造函数以接受CString参数并将其存储到子代的sampCnt变量中。然后,由于DDX_Text语句,MFC代码将在控件中显示它。
答案 1 :(得分:1)
删除GetDlgItem(IDC_SAMPCOUNT)->SetWindowTextA("1");
行并在调用dlg.DoModal()
之前设置值,例如
ChildBox dlg;
dlg.sampCnt = sampleCount;
if (dlg.DoModal() == IDOK)
{ sampleCount = dlg.sampCnt;
}
答案 2 :(得分:0)
我认为你正在创建ChildBox Dialog的局部变量 所以,即使你为它的变量赋值,它也行不通。
而是创建ChildBox对话框的指针变量
void ParentDialog :: OnInput() {
ChildBox *dlg;
if (dlg->DoModal() == IDOK)
{
sampleCount = dlg->sampCnt;
}
dlg = NULL ;
}