如何根据父对话框中设置的变量在子 MFC 对话框中显示值?
Posted
技术标签:
【中文标题】如何根据父对话框中设置的变量在子 MFC 对话框中显示值?【英文标题】:How to display values in child MFC dialog box based on variables set in parent dialog box? 【发布时间】:2014-11-09 20:37:46 【问题描述】:我正在处理一个 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 的当前值。
我觉得这应该很简单,但我不太明白,谢谢你的帮助。
【问题讨论】:
对不起,我在复制代码时犯了一个错误。 sampleCount 是在 ParentDialog 的初始化时声明的,所以它不会消失。编辑我的问题以摆脱大括号内的 int 。 另外,我在研究中遇到过几次该链接,但我无法完全弄清楚我需要什么。我可能只是没有完全理解它,或者它没有完全涵盖我需要的东西,但无论哪种方式,我似乎都无法从中得到答案。 【参考方案1】:修改子对话框的构造函数以接受 CString 参数并将其存储到子对话框的 sampCnt 变量中。然后 MFC 代码会因为 DDX_Text 语句将其显示在控件中。
【讨论】:
【参考方案2】:去掉GetDlgItem(IDC_SAMPCOUNT)->SetWindowTextA("1");
这一行,在调用dlg.DoModal()
之前设置值,比如
ChildBox dlg;
dlg.sampCnt = sampleCount;
if (dlg.DoModal() == IDOK)
sampleCount = dlg.sampCnt;
【讨论】:
【参考方案3】:我认为您正在创建 ChildBox 对话框的局部变量 所以,即使你给它的变量赋值,它也不会起作用。
而是创建一个ChildBox Dialog的指针变量
void ParentDialog::OnInput()
ChildBox *dlg;
if (dlg->DoModal() == IDOK)
sampleCount = dlg->sampCnt;
dlg = NULL ;
【讨论】:
以上是关于如何根据父对话框中设置的变量在子 MFC 对话框中显示值?的主要内容,如果未能解决你的问题,请参考以下文章