【问题标题】:How to display values in child MFC dialog box based on variables set in parent dialog box?如何根据父对话框中设置的变量在子 MFC 对话框中显示值?
【发布时间】: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 。
  • 另外,我在研究中遇到过几次该链接,但我无法完全弄清楚我需要什么。我可能只是没有完全理解它,或者它没有完全涵盖我需要的东西,但无论哪种方式,我似乎都无法从中得到答案。

标签: c++ visual-c++ mfc dialog


【解决方案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 ;
      

      }

      【讨论】:

        猜你喜欢
        • 2017-10-14
        • 1970-01-01
        • 1970-01-01
        • 2023-03-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多