本帖最后由 youzhj 于 2011-04-26 08:48:51 编辑

解决方案 »

  1.   

    你是不是把这两个 edit ctrl 都选中了 only number(只能是数字)的属性阿。
    如果是的话,取消它们。
      

  2.   

    如果是float型的变量,MFC会调用下面代码,一定会弹出“请输入一个数字”提示框 if (!_AfxSimpleFloatParse(szBuffer, d))
    {
    AfxMessageBox(AFX_IDP_PARSE_REAL);
    pDX->Fail();            // throws exception
    }要想不弹出,就定义一个CString变量,然后自己使用
    float atof(const char *string);
    函数转换
      

  3.   

    就是从CEdit派生一个类CEditEx,然后在CEditEx中处理OnCharvoid CEditEx::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) 
    {
    // TODO: Add your message handler code here and/or call default

    if((nChar>='0'&&nChar<='9')||nChar=='-')
        {
            if(nChar=='-')
            {
                CString str;
                GetWindowText(str);
                if(str.GetLength()>0)
    {
    AfxMessageBox("负号只能在第一位");
    return;
    }
    }
        }
        else
    {
            AfxMessageBox("输入有误");
    return;
    } CEdit::OnChar(nChar, nRepCnt, nFlags);}
    给你界面上的Edit关联变量时,将它关联成CEditEx类(例如CEditEx m_Edit;)
      

  4.   

    BOOL CNewEdit::PreTranslateMessage(MSG* pMsg) 
    {
    // TODO: Add your specialized code here and/or call the base class
    if(WM_KEYDOWN == pMsg->message)
    {
    WPARAM ch = pMsg->wParam;
    if((ch >= _T('0') && ch <= _T('9')) 
    || (ch == VK_DELETE) 
    || (ch == VK_BACK) 
    || (VK_SUBTRACT == ch) 
    || (0xbe == ch)
    || (0xbd == ch)
    || (VK_LEFT == ch) 
    || (VK_RIGHT == ch))
    {
    return CEdit::PreTranslateMessage(pMsg);
    }
    return TRUE;
    }
    return CEdit::PreTranslateMessage(pMsg);
    }
      

  5.   

    跟这个无关吧,哪里有选择only number的选项,我都没注意过。
      

  6.   

    额,我都不好意思说了,嘿嘿,你们给的代码,我都不知道怎么用,我就自己写了下面的这些东西;void CWriteVADlg::OnEnChangeVa01()
    {
    UpdateData(true);
    }void CWriteVADlg::OnEnChangeVa02()
    {
    UpdateData(true);
    }void CWriteVADlg::OnBnClickedOk()
    {
    if (OpenRunDB())
    {
        SetVAValue("VA01",float_VA01);
        SetVAValue("VA02",float_VA02);
            CloseRunDB();
    AfxMessageBox(_T("变量值写入成功!"));
    }
    else
    {
            AfxMessageBox(_T("变量值写入失败,请重试!"));
    }
    OnOK();
    }void CWriteVADlg::OnBnClickedCancel()
    {
    OnCancel();
    }其它的代码都是vs自己生成的,我也不知道怎么生成的,分别有啥用。