首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

MFC对话框数据验证失败时还原数据

MFC(Microsoft Foundation Classes)是微软提供的一套用于开发Windows桌面应用程序的C++类库。MFC对话框是MFC框架中的一种常见用户界面元素,用于显示和收集用户输入的数据。

数据验证是确保用户输入的数据符合预期要求的过程。当MFC对话框中的数据验证失败时,即用户输入的数据不符合预期要求,我们需要还原数据以便用户重新输入。

为了实现MFC对话框数据验证失败时的数据还原,可以采取以下步骤:

  1. 在对话框类中定义成员变量来保存用户输入的数据。这些成员变量可以是对话框中各个控件(如文本框、复选框、下拉列表等)的值对应的变量。
  2. 在对话框类的DoDataExchange函数中使用DDX_XXX函数将控件的值与成员变量进行关联。例如,使用DDX_Text函数将文本框的值与成员变量进行关联。
  3. 在对话框类中重写OnOK函数,该函数在用户点击对话框的确定按钮时被调用。在OnOK函数中进行数据验证,如果验证失败,则进行数据还原。
  4. 在数据验证失败时,可以使用成员变量的值重新设置对话框中各个控件的值,以还原用户输入的数据。例如,使用SetDlgItemText函数将文本框的值设置为成员变量的值。

以下是一个示例代码:

代码语言:cpp
复制
class CMyDialog : public CDialog
{
public:
    // 对话框中的成员变量
    CString m_strName;
    int m_nAge;

    // 对话框消息映射
    DECLARE_MESSAGE_MAP()

    // DDX/DDV 支持
    virtual void DoDataExchange(CDataExchange* pDX);

    // 点击确定按钮时的处理函数
    virtual void OnOK();
};

BEGIN_MESSAGE_MAP(CMyDialog, CDialog)
END_MESSAGE_MAP()

void CMyDialog::DoDataExchange(CDataExchange* pDX)
{
    CDialog::DoDataExchange(pDX);
    DDX_Text(pDX, IDC_EDIT_NAME, m_strName);
    DDX_Text(pDX, IDC_EDIT_AGE, m_nAge);
}

void CMyDialog::OnOK()
{
    // 数据验证
    if (m_strName.IsEmpty() || m_nAge <= 0)
    {
        // 数据验证失败,还原数据
        SetDlgItemText(IDC_EDIT_NAME, m_strName);
        SetDlgItemInt(IDC_EDIT_AGE, m_nAge);
        return;
    }

    // 数据验证通过,执行默认的确定按钮处理
    CDialog::OnOK();
}

在上述示例代码中,我们定义了一个对话框类CMyDialog,并在其中定义了两个成员变量m_strName和m_nAge,分别对应对话框中的姓名文本框和年龄文本框。在DoDataExchange函数中,我们使用DDX_Text函数将这两个成员变量与对应的文本框进行关联。在OnOK函数中,我们进行数据验证,如果验证失败,则使用SetDlgItemText和SetDlgItemInt函数将文本框的值还原为成员变量的值。

这样,当用户点击对话框的确定按钮时,如果数据验证失败,对话框中的数据将会被还原,以便用户重新输入。

腾讯云相关产品和产品介绍链接地址:

请注意,以上链接仅供参考,具体的产品选择应根据实际需求和情况进行评估和决策。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

PyQt5 对话框 数据验证

本篇介绍PyQt5对话框数据合法性的验证。有两种验证方式:预防式验证(preventative)和 提交后验证 (post-mortem)。...预防式验证适合于单个部件的数据验证,可以通过选择合适的部件类型,设置最大字符长度或者数字的大小范围,应用正则表达式等等来进行预防式验证。提交后验证可应用于单个控件,也可应用于多部件交叉验证。...两种验证策略可单独或者组合使用。 具体的运用请参见如下代码: ?...import Qt, pyqtSignal from PyQt5.Qt import QRegExp,QRegExpValidator from PyQt5.QtWidgets import * #非模态对话框...("Apply"型更新),自定义信号,数据验证,正则表达式,掩码 class NumberFormatDlg(QDialog): changed = pyqtSignal()#自定义信号

1.1K30
  • 数据采集遇到短信验证码怎么办?

    我们其实可以设计一个「中间件」或者是「数据库」作为一个中间载体,对接短信验证码的获取和处理。 ?...手机上的验证码发送到数据库中同样有两个方式: 需要人工部分操作的方式; 全自动的方式; 人工操作发送短信验证码 在这里,我们可以需要一个「微信公众号」、「钉钉企业机器人」等工具。 ?...对这些工具进行二次开发,手机收到短信验证码之后,将短信验证码发送到这些平台,使得其能够接收用户发送的短信验证码并进行处理。所谓的处理也就是将短信验证码传输存储到「数据库」中。...之后,采集程序去「数据库」中获取最新的验证码即可。 ?...全自动发送短信验证码 全自动发送短信验证码,则需要开发一个具有「短信监听」功能的简单APP,APP监听并读取用户手机接收到的短信,并将验证码短信进行分析处理推送给后台「数据库」。 ?

    1.8K10

    dedecms还原数据要选对备份目录 不然会提示function文件出错

    小李子最近在学习dedecms,在网上下载了一个二次开发的系统,顺利安装后想要还原一下作者的备份数据,可一直没有成功,让ytkah查看一下什么情况。...附dedecms数据备份还原教程   系统 - 数据库备份/还原 ?   1.dedecms数据备份 ?   ...这里可以全选或选择部分表进行备份,指定备份数据格式我们一般为默认,分卷大小一般为2048,备份表结构信息默认打勾,如只需要备份数据,可以不选择。我们点击提交按钮。...备份完成后会提示“完成所有数据备份”!   2.dedecms数据还原 ?   ...进入到数据还原页面后,系统会自动去找/data/backupdata/里面备份的数据文件,如果存在备份的文件就显示在页面上,最后点击【开始还原数据】按钮,还原我们备份的数据

    2.6K70

    还原对于服务器失败 备份集中的数据库备份与现有数据库不同

    还原对于服务器失败 备份集中的数据库备份与现有数据库不同 今天在SQL Server 2008 R2中还原一个数据库备份,遇到错误。...还原对于服务器失败 备份集中的数据库备份与现有数据库不同。 解决方案有以下几种,一般能够成功: 在恢复新建数据,没有选中“覆盖原数据库”。...解决方法:选中用于还原的备份集,在选项中,勾选“覆盖现有数据库”(WITH REPLACE)。 新数据库文件与还原数据库文件名不同。...解决方法:删除新建的数据库,直接在“数据库”按钮上点击右键——还原数据库。...出来对话框中先找到备份文件*.bak,此时目标数据库下拉框中自动出现跟备份文件中数据库名一样的数据库名称,选择它,还原,操作成功。 数据库的备份不是完整备份。

    4.3K20

    深入浅出MFC-读书笔记

    static 成员函数「没有this 参数」的这种性质,正是我们的MFC 应用程序在准备callback 函数所需要的。...相同类型(或说风格)的MFC 程序一定具备相同的程序骨干,AppWizard用于生成这样的骨干,但是每一个project 使用AppWizard 的机会只有一次,生成后不能还原。...在开始你的程序撰写之前,小心做好系统分析的工作,AppWizard是不能够还原的。...Document/View 的价值在于,这些MFC 类别已经把一个应用程序所需的「数据处理与显示」的函数空壳都设计好了,这些函数都是虚拟函数,所以你可以(也应该)在衍生类别中改写它们。...MFC 的Document/View 架构希望更把程序员的心力导引到真正的数据结构设计以及真正的数据显示动作上,而不要花在模块的沟通或消息的流动传递上。

    81720

    EasyCVR使用MySQL数据库,国标级联添加通道失败该如何解决?

    有用户反馈EasyCVR通过国标级联,添加通道失败,请求我们协助排查。今天来分享一下排查及解决办法。用户使用Mysql数据,EasyCVR出现国标级联添加通道失败的情况。...(EasyCVR平台默认使用的是sqlite数据库,用户可以根据需求切换为mysql数据库。关于数据库的切换方法及相关技术文章,感兴趣的用户可以在博客中自行搜索了解。)...技术人员在排查,通过通道打断点调试发现,是级联通道列表没有设置主键自增:sqlite数据库在没有设置主键自增,默认整型主键也会自增:但是在mysql数据库中,字段不为空,并且没有设置。...当没有设置自增,则会报错,所以在此处需要将该id字段设置为自增:经过上述修改后,级联通道已经添加成功。EasyCVR视频融合云服务平台基于云边端一体化管理,具有强大的数据接入、处理及分发能力。

    1.3K20

    VS下如何建立一个新的MFC程序 网络编程 课设 基于C++ MFC 连接数据库 小应用 小项目浅析展示

    就是 打开VS 新建项目-MFC -MFC工程-点基于对话框 -和在静态库中使用 然后下一页将关于对话框取消了 不然会有两个对话框出来 然后点击完成 具体如下 步骤1:双击打开vs2013,进入起始页,...勾选“基于对话框”,在“MFC的使用”中,勾选“在静态库中使用MFC(U)”,再点击下一步。...m_sqlCon, "localhost", "root", "123456", "testa", 3306, NULL, 0))     {         AfxMessageBox(_T("访问数据失败...mysql_real_connect(&m_sqlCon, "localhost", "root", "123456", "testa", 3306, NULL, 0)) { AfxMessageBox(_T("访问数据失败...上面这个就是一个简单的实现 从 MFC  到数据库的   查询学生信息的小界面。

    3K30

    2018最新mfc作为上位机接收硬件端USB或串口数据显示成图片 解决串口接收数据丢字节丢包问题

    本文用的是VS2013MFC写串口数据接收: 第一步:首先建立一个MFC工程,成功后会跳出一个对话框,直接在对话框上点击右键-》点击插入ACTIVAE控件-》选择MicrosoftCommunications...1个字符将引发一个接收数据的OnComm事件 m_ctrlComm.put_InputLen(0); //设置当前接收区数据长度为0 m_ctrlComm.get_Input();//...先预读缓冲区以清除残留数据 } 好这是打开串口的函数 ,既然打开的串口那么硬件就要给我们发数据了 ,而mFC也要有接收的能力 所以这时候我们要添加一个 串口数据的响应函数: ?...丢字节   STM32   单片机51都有可能出现这种情况  (串口调试助手收发大量数据是怎样处理的,新手求教,写了一个串口调试助手,接收数据会丢帧,串口通讯,丢包严重是什么问题,为什么串口单步调试正常...我加了一个延时就OK了   这里加延时 可以硬件端发送加  也可以MFC 中加  都可以反正  串口发送数据会丢包说白就是电脑跟不上  电脑垃圾    这时候我们就辅助一个延时函数 然程序停一下  慢点接

    3K30

    网络编程 课设 基于C++ MFC 连接数据库 小应用 小项目浅析展示

    就是 打开VS 新建项目-MFC -MFC工程-点基于对话框 -和在静态库中使用 然后点击完成 注意啦 命名 都用英文 源码在这https://pan.baidu.com/s/1chRMPK   工具:...m_sqlCon, "localhost", "root", "123456", "testa", 3306, NULL, 0))     {         AfxMessageBox(_T("访问数据失败...mysql_real_connect(&m_sqlCon, "localhost", "root", "123456", "testa", 3306, NULL, 0)) { AfxMessageBox(_T("访问数据失败...上面这个就是一个简单的实现 从 MFC  到数据库的   查询学生信息的小界面。...student_id = num2;             student_major = num3;             SetDlgItemText(IDC_EDIT3, student_name);//将数据都显示到对话框中的控件中去

    1.4K60

    AfxMessageBox和MessageBox差别

    假设用MFC的话,请尽量使用afxmessagebox,由于这个全局的对话框最安全,也最方便。 可是在WIN32 SDK的情况下仅仅能使用MESSAGEBOX。...MessageBox 比 AfxMessageBox 灵活(如指定对话框标题等)!...假设用MFC的话,请尽量使用afxmessagebox,由于这个全局的对话框最安全,也最方便。可是在WIN32 SDK的情况下仅仅能使用MESSAGEBOX。...AfxMessageBox不能控制消息框标题,经常使用于调试程序时的内部数据输出或警告;MessageBox比較正式,经常使用在要提交的应用程序版本号中,能够控制标题内容而不必採用含义不明的可运行文件名称为标题...里仅仅是少了第一个參数,同一候第三和第四都有默认值了,这就是它们的差别,其它的同样 同一候在MFC的窗口类里要调用API的那个,在写成例如以下: ::MessageBox(NULL, “msg”,

    93010

    上位机软件系统开发工具简介

    1、微软基础类库(MFC)简介 本系统上位机软件设计是基于 MFC进行开发的,MFC(Microsoft Foundation Classes)是微软基础类库的简称,提供了基于 C++语言的面向对象编程的框架...本系统采用 MFC 作为上位机软件开发工具,主要原因是: (1) MFC 使用 C++作为底层编写语言,并对大多数常用的 Windows API 进行了类的封装,并以成员函数或变量的形式开放接口供用户使用...(3) MFC 采用消息映射机制,每个对话框类中,均包含一个消息映射表,对于控件的多种响应如鼠标单击、双击事件,都可生成一对消息映射关系,开发人员只需新建一个消息,并在自动生成的消息响应函数中编写对应的处理函数...BCGControlBar 是 MFC 的一个扩展库,主要是用来设计和美化 MFC 的界面,这个扩展库包含了 300 多个设计完备的 MFC 扩展类。...(2) SQL Server 2008 R2 在 Windows 平台下具有很高的安全性,可设置身份验证的登录模式,而且还提供数据文件和日志文件加密功能,保证工厂敏感信息的不被泄露。

    1.5K10

    VC6.0基础知识使用小结

    这段时间在使用MFC做媒体播放器项目,查询了不少资料,用到的技术主要有ADO、多线程、DirectShow、MFC相关控件包括ActiveX控件(Windows Media Player、Active...先谈一下这段时间的收获吧,这将近一个月的时间内,通过媒体播放器项目,我熟悉了使用ADO操作Access数据库、SQL语句的运用(虽然用的语句比较简单,无非增删改查)、Window Media Player...else {    AfxGetMainWnd()->GetMenu()->CheckMenuItem(ID_STATUS,MF_CHECKED); } } 2、VC中隐藏窗口的一部分,比如说查询数据库的左右侧窗口...,比如IDR_MAINFRAME_MENU,这样的话就可以在该对话框类对象创建使用时就可以显示该菜单了。...10)   从文档类取得视图类的指针            从文档获得视图类指针目的一般为了控制同一文档的多个视图的定位问题,我的体会特别是文字处理CEditView当产生多个视图类,这个功能是非常需要的

    1.2K20
    领券