我改变了编辑框中的数据(编辑框中的只能是浮点数),如果在范围内的话,就要以一定格式(保留小数点后三位)显示在编辑框中。好的,问题就来了:如果只是为编辑框定义的一个float型的成员变量m_edit1,首先我用format函数把它改成固定格式的数据,得到的类型是CString,没办法通过Setwindowtext()回显;如果增加一个CEdit类型的变量调用该函数,程序虽然能编译通过,但是每次运行的时候都会出现内存的位置不可读的错误(这个错误真的太烦了!!!!!!)
void CTest12Dlg::OnOK() //
{
// TODO: Add extra validation here
GetNextDlgTabItem(GetFocus())->SetFocus();}void CTest12Dlg::OnKillfocusEdit1() 
{
// TODO: Add your control notification handler code here
CString str;
if(m_edit1<=100&&m_edit1>=-100)
{
str.Format("%.3f", m_edit1);
//我要回显m_edit1这个数据该怎么添加代码呢?

}
else
{
CEdit* pEdit = (CEdit*)GetDlgItem(IDC_EDIT1);
ASSERT(pEdit->GetSafeHwnd());
pEdit->SetWindowText(_T("57.500")); // Default Value
pEdit->SetSel(0, -1);
pEdit->SetFocus();
}
}
求高手指点!!cstringMFC编辑框

解决方案 »

  1.   

    “如果只是为编辑框定义的一个float型的成员变量m_edit1,首先我用format函数把它改成固定格式的数据,得到的类型是CString,没办法通过Setwindowtext()回显;”要直接 给 float 如:m_edit1=1.001;通过 CString 格式化 后 ,还要 变成 float 给 m_edit1。
      

  2.   

    我添加 m_edit1 = (float)atof (str.GetBuffer(str.GetLength()));后,原来的格式已经不保留了。。
      

  3.   

    其实 edit 里 可以 选择 格式:
     看看有没有 #.### 格式化
      

  4.   

    要是有这样的格式就好了,唉我查了好多资料都是说用format函数做好格式的,比如这种例子:
    CString str;
    double dVal = 10.23232;
    str.Format("%.2f",dVal);
    难道我用编辑框的时候还得在程序里面给编辑框赋值么?我想要实现的功能就是这样输入20,转移焦点后显示的是20.000或者输入20.474784848显示的是20.475.
      

  5.   

    把编辑框对应变量设为 CString 如何
    扩展 CEdit 为 MyEdit,重载OnChar或 OnKeyDown ,只让输入数字型字符或小数点,
    将转移焦点(LostFocus)搞个响应函数,在函数中显示三位小数的字符串
      

  6.   

    float型的成员变量就可以避免做OnChar那样的消息响应函数了,因为输入字母什么的就算是非法字符了。问题是在这里,亲:我输入数据后格式化(保留小数位数)还没找的办法回显到编辑框里面。自己测试的结果是输入20,转移焦点后编辑框还是显示的20
      

  7.   

    float型的成员变量就可以避免做OnChar那样的消息响应函数了,因为输入字母什么的就算是非法字符了。问题是在这里,亲:我输入数据后格式化(保留小数位数)还没找的办法回显到编辑框里面。自己测试的结果是输入20,转移焦点后编辑框还是显示的20有没有可能是这样:虽然CEdit 数据类型是 float,但是CEdit中的float的显示方法并不支持把20.000 显示为20.000,因为他觉得后面都是 0 ,没必要显示。 你试试 20.1010101010 ,估计处理之后,就能显示为 20.101
      

  8.   

    float型的成员变量就可以避免做OnChar那样的消息响应函数了,因为输入字母什么的就算是非法字符了。问题是在这里,亲:我输入数据后格式化(保留小数位数)还没找的办法回显到编辑框里面。自己测试的结果是输入20,转移焦点后编辑框还是显示的20有没有可能是这样:虽然CEdit 数据类型是 float,但是CEdit中的float的显示方法并不支持把20.000 显示为20.000,因为他觉得后面都是 0 ,没必要显示。 你试试 20.1010101010 ,估计处理之后,就能显示为 20.101

    你说的我试了,的确问题是,我在一个软件上试过输入20,它的就能做到回显出20.000.不过奇怪的是,每次转移焦点后,它的数据好像摆正了一样,好像编辑框前两个字符自动打了空格。
      

  9.   

    float型的成员变量就可以避免做OnChar那样的消息响应函数了,因为输入字母什么的就算是非法字符了。问题是在这里,亲:我输入数据后格式化(保留小数位数)还没找的办法回显到编辑框里面。自己测试的结果是输入20,转移焦点后编辑框还是显示的20有没有可能是这样:虽然CEdit 数据类型是 float,但是CEdit中的float的显示方法并不支持把20.000 显示为20.000,因为他觉得后面都是 0 ,没必要显示。 你试试 20.1010101010 ,估计处理之后,就能显示为 20.101

    CEdit* pEdit1=(CEdit*)GetDlgItem(IDC_EDIT1);
    pEdit1->SetWindowText(" "+str);
    这样貌似可以诶
      

  10.   

    float型的成员变量就可以避免做OnChar那样的消息响应函数了,因为输入字母什么的就算是非法字符了。问题是在这里,亲:我输入数据后格式化(保留小数位数)还没找的办法回显到编辑框里面。自己测试的结果是输入20,转移焦点后编辑框还是显示的20有没有可能是这样:虽然CEdit 数据类型是 float,但是CEdit中的float的显示方法并不支持把20.000 显示为20.000,因为他觉得后面都是 0 ,没必要显示。 你试试 20.1010101010 ,估计处理之后,就能显示为 20.101

    CEdit* pEdit1=(CEdit*)GetDlgItem(IDC_EDIT1);
    pEdit1->SetWindowText(" "+str);
    这样貌似可以诶
    这样显示的 字符串