MFC编辑框设置,输入、输出数据最多保留5位小数
2016-03-22 10:57
281 查看
1.获取文本改变(输入更多字符时)的消息时,获取输入的内容,判断小数点后位数(笨办法是查找小数点位置),如果超出要求,就通过sprintf使用%.5f这样的办法,把输入的数字改为符合需求的格式,然后更新编辑框里面的文本。
2.双击Edit控件,添加消息处理函数,将上面这段代码放在里面.可以这样(Unicode版本)
CString strText, strTemp;
// 为edit控件绑定变量m_EditText
//获取控件的内容
m_EditText.GetWindowText(strText);
//定位小数点
int nPos = strText.Find(_T('.'));
if(n != -1)
{
//获取小数点后面的数据
strTemp = strText.Mid(n+1);
//如果长度大于5,则忽略后面的数据
if(strTemp.GetLength() > 5)
{
strText.Format(_T("%.5f"), _tstof(strText.GetBuffer()));
strText.ReleaseBuffer();
m_EditText.SetWindowText(strText);
}
} ---------------------------------------------------------------------------------------------------------------------------------------
这涉及2种作法
1、直接有接收框的事件处理中进行输入限制,当输入长度超过时禁止再输入。此法的缺点的编程较复杂,必须处理好各个输入事件。
2、在输入结束离开接收框时处理,即后处理。此法优点是处理简单。
------------------------------------------------------------------------------------------------------------------------------------------------
我是这样想的:给编辑框设置一个成员变量m_aa,再定义一个CString str,通过str.Format()来实现格式化输出,在编辑框失去焦点时触发事件。代码是这样的:
void CCurve_testDlg::OnKillfocusEdit1()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
float naa; //编辑框输入值
CString str; //定义一个字符串型变量
naa=m_aa;
str.Format(_T("%.5f"),naa); //格式化输出,%.5f是指保留小数点后5位小数
m_aa=atof(str); //将转化后的值显示在编辑框上
UpdateData(FALSE);
}
可是在使用的时候遇到了问题,界面上有三个编辑框(m_aa,m_bb,m_cc),对每个编辑框采取以上处理,只有第一个编辑框实现了小数点后保留5位小数,而其他两个编辑框都无法实现(第二个编辑框小数点后保留了4位小数,第三个保留了3个小数,这样递减)。我不知道这是什么原因。。。
![](http://img.bbs.csdn.net/upload/201503/23/1427103669_680541.png)
-------------------------------------------------------------------------------------------------------------------------------
这个是我按照你的思路写出来,基本没有区别,也实现了你想要
4000
的功能
UpdateData(TRUE);
float naa = m_aa;
CString str;
str.Format(_T("%.5f"), naa);
m_aa = _tstof(str.GetBuffer());
str.ReleaseBuffer();
UpdateData(FALSE);
你可以检查一下三个控件变量,看看有什么问题没有,比如设置断点看看,是否获取到了你输入的值,而这个值又是在哪里被改写了。
----------------------------------------------------------------------------------------------------------------------
编写一个EDIT类,里面加判断,你这样写的话有很多BUG,比如可用输入字母、输入多个小数点、输入多个符号,还有中文等等。
2.双击Edit控件,添加消息处理函数,将上面这段代码放在里面.可以这样(Unicode版本)
CString strText, strTemp;
// 为edit控件绑定变量m_EditText
//获取控件的内容
m_EditText.GetWindowText(strText);
//定位小数点
int nPos = strText.Find(_T('.'));
if(n != -1)
{
//获取小数点后面的数据
strTemp = strText.Mid(n+1);
//如果长度大于5,则忽略后面的数据
if(strTemp.GetLength() > 5)
{
strText.Format(_T("%.5f"), _tstof(strText.GetBuffer()));
strText.ReleaseBuffer();
m_EditText.SetWindowText(strText);
}
} ---------------------------------------------------------------------------------------------------------------------------------------
这涉及2种作法
1、直接有接收框的事件处理中进行输入限制,当输入长度超过时禁止再输入。此法的缺点的编程较复杂,必须处理好各个输入事件。
2、在输入结束离开接收框时处理,即后处理。此法优点是处理简单。
------------------------------------------------------------------------------------------------------------------------------------------------
我是这样想的:给编辑框设置一个成员变量m_aa,再定义一个CString str,通过str.Format()来实现格式化输出,在编辑框失去焦点时触发事件。代码是这样的:
void CCurve_testDlg::OnKillfocusEdit1()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
float naa; //编辑框输入值
CString str; //定义一个字符串型变量
naa=m_aa;
str.Format(_T("%.5f"),naa); //格式化输出,%.5f是指保留小数点后5位小数
m_aa=atof(str); //将转化后的值显示在编辑框上
UpdateData(FALSE);
}
可是在使用的时候遇到了问题,界面上有三个编辑框(m_aa,m_bb,m_cc),对每个编辑框采取以上处理,只有第一个编辑框实现了小数点后保留5位小数,而其他两个编辑框都无法实现(第二个编辑框小数点后保留了4位小数,第三个保留了3个小数,这样递减)。我不知道这是什么原因。。。
![](http://img.bbs.csdn.net/upload/201503/23/1427103669_680541.png)
-------------------------------------------------------------------------------------------------------------------------------
这个是我按照你的思路写出来,基本没有区别,也实现了你想要
4000
的功能
UpdateData(TRUE);
float naa = m_aa;
CString str;
str.Format(_T("%.5f"), naa);
m_aa = _tstof(str.GetBuffer());
str.ReleaseBuffer();
UpdateData(FALSE);
你可以检查一下三个控件变量,看看有什么问题没有,比如设置断点看看,是否获取到了你输入的值,而这个值又是在哪里被改写了。
----------------------------------------------------------------------------------------------------------------------
编写一个EDIT类,里面加判断,你这样写的话有很多BUG,比如可用输入字母、输入多个小数点、输入多个符号,还有中文等等。
相关文章推荐
- mvc中Scripts.Render的用法
- Socket相关
- 剑指offer面试题之变态跳台阶
- 使用IIS发布WCF服务
- Django--static静态文件引用
- MySQLMerge存储引擎
- HDOJ 2017 字符串统计
- Android学习之自定义进度条ProgressBar
- IOS开发教程之put上传文件的服务器的配置及实例分享-备用
- 基本控件一-UILabel
- android开发判断虚拟菜单是否开启及获取虚拟菜单高度
- 使用HTML5 Canvas API绘制弧线的教程
- recycleview跟scrollview嵌套
- Xcode 7 创建 Empty Application 工程
- 线性回归及在R中应用(一)
- Spring事务配置的五种方式
- 软件设计和软件开发的主旨
- 毕业设计1-开题报告
- 观察者模式
- android自动化之MonkeyRunner测试环境配置(一) - 记录那点滴的改变的专栏 - 博客频道 - CSDN.NET