UpdateData工作,然后数据更改
UpdateData works, then data changes?
语言:C++
开发环境:Microsoft Visual C++
使用的库:MFC
背景:所以我创建了一个应用程序,它基本上是一个大型首选项对话框,用户可以在其中配置多个页面,每个页面都有一组不同的设置。当用户完成后,他/她有三个选项来保存首选项(作为XML(:保存当前[页面]、存储这些和全部保存。
我现在正在使用保存这些功能。当用户选择此选项时,会显示一个对话框,其中每个页面都有复选框,用户可以选择要输出的页面。一旦他们选择了希望保存文件的目录,神奇的事情就发生了,XML文件就被写入了。
问题:我有一个函数(UpdatePageData(,它将检测正在显示的页面,并通过调用UpdateData来更新当前页面的数据。我设置了一个断点来观察,以确保变量中充满了用户输入的值,并且一切正常。然而,当程序从复选框对话框(我在其中调用UpdatePageData(跳到我正在保存的页面的类时,突然所有的值都是错误的。
下面我包含了一些代码,可以帮助你们理解程序流程。
注意:在SaveThese中,我目前只保存一个页面。。。一旦我发现问题,我会让它更新所有选择的页面。
位置:主对话框
void CSAPrefsDialog::OnSaveThese()
{
int msgboxID = ::MessageBox(
NULL,
(LPCSTR)"Are you sure you want to save?",
(LPCSTR)"Save These",
MB_ICONQUESTION | MB_OKCANCEL
);
switch (msgboxID)
{
case IDCANCEL:
break;
case IDOK:
UpdatePageData();
CSaveThese m_sT;
m_sT.DoModal();
break;
}
}
位置:主对话框
void CSAPrefsDialog::UpdatePageData()
{
if ((m_iCurPage >= 0) && (m_iCurPage < m_pages.GetSize()))
{
pageStruct *pPS = (pageStruct *)m_pages.GetAt(m_iCurPage);
if (pPS)
{
ASSERT(pPS->pDlg);
if (pPS->pDlg)
{
if (!pPS->pDlg->UpdateData()) // THIS WORKS. THE DATA IS UPDATED.
{
AfxMessageBox("Did not update data.");
}
}
}
}
}
位置:保存这些类
void CSaveThese::OnBnClickedOk()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE); // figures out which boxes are checked for saving
CDirDialog dir;
CSAPrefsDialog prefsDialog;
if(dir.DoBrowse())
{
prefsDialog.m_strDirectorySavePath = dir.m_strPath;
}
// [ other if-statements like the one below to check the check boxes ]
}
if(m_bST_FS)
{
FSC_Main m_FS;
m_FS.Save(prefsDialog.m_strDirectorySavePath);
}
OnOK();
}
位置:FSC_Main类
void FSC_Main::Save(CString dirPath)
{
if(Validate())
{
dirPath += "\FS_Config.xml";
FILE *fp = fopen(dirPath, "w+");
WriteXML(fp);
fclose(fp);
}
}
当它到达WriteXML时,这些值要么已恢复到其初始化值(空字符串,所有组合框为-1(,要么具有奇怪的值(字符串为空,组合框为大数字(。
我想我只是把东西放错地方了。我只是不确定为什么会发生这种情况,这真的是我和真正开始这个项目之间最大的障碍。
Jon,很难理解您的代码。我所理解的是,CSAPrefsDialog对话框类中有一个成员变量m_pages,您正在通过调用UpdateData来更新它。然后创建一个局部变量CSaveThese m_sT并调用DoModal。您希望CSaveThese类应该包含m_Pages的值吗?
- 如何存储用户输入的所有数据,然后在他们想要查看所有数据时显示它们
- 从文本文件中读取并输入到数组结构中,然后显示读取的数据C++
- 是否可以将多个结构作为一个数据包存储在一个函数中,然后传递给其他函数并在那里提取?
- 在结构向量中搜索一个数据成员,然后打印匹配的所有数据成员
- 如何将两个 jlong 数据类型转换为 jstring,然后将两个字符串连接在一起以便从 JNI 将字符串返回给 jav
- 比较 JSON::Value 变量中的数据,然后更新到文件
- 将40个字节长的数据框从十六进制转换为二进制,然后转换为十进制
- 如何在每次循环迭代期间生成向量,存储数据,然后删除该向量?
- 如何以块的形式读取数据,然后从中获取某些数据
- C++ 读取.csv文件,将数据放入变量中,然后放入对象中
- 如何生成位图头数据,然后使用 C++ 写入文件
- 使用队列和列表 STL 进行C++分配。在将数据填充到列表或队列中然后打印该数据时遇到问题
- C++从 csv 文件中读取,然后将数据分配给类成员
- 我如何调用我的3个数据成员中每个人的设置方法,然后显示由我的设置方法设置的值
- 在TXT文件中读取一些数据,然后将其传递给字符串数组
- 如果没有数据,则创建一个包含数据的文本文件,然后读取它以检索数据
- 我如何从FSTREAM中获取数据,然后再次获取数据
- 如何将足够的数据从文本文件分配到char*中,然后将其复制到内存C 中
- 在C 中读取二进制数据,然后写入MySQL
- 如何初始化静态 arduino (C) 数据结构,然后使用它们