求解关于CEdit Control输入框输入负号的问题?

youzhj 2011-04-26 08:47:52
新手,刚建一个很简单的项目,加了两个Edit Control控件,为它们添加了float型的变量C_VA01和C_VA02,通过Button来确认输入,但是当我输入负号时,就提示“请输入一个数字”,我知道这是因为我给Edit Control加了UpdateData()函数的缘故。那么请问,在我输入负号时,如何才能不让系统弹出那个提示?不好意思,请考虑新手的理解能力哈。
...全文
195 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
youzhj 2011-04-26
  • 打赏
  • 举报
回复
额,我都不好意思说了,嘿嘿,你们给的代码,我都不知道怎么用,我就自己写了下面的这些东西;
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自己生成的,我也不知道怎么生成的,分别有啥用。
youzhj 2011-04-26
  • 打赏
  • 举报
回复
跟这个无关吧,哪里有选择only number的选项,我都没注意过。[Quote=引用 3 楼 lin152 的回复:]
你是不是把这两个 edit ctrl 都选中了 only number(只能是数字)的属性阿。
如果是的话,取消它们。
[/Quote]
youzhj 2011-04-26
  • 打赏
  • 举报
回复
非常谢谢哈,我去试试。[Quote=引用 5 楼 king_hhuang 的回复:]
就是从CEdit派生一个类CEditEx,然后在CEditEx中处理OnChar

C/C++ code

void CEditEx::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: Add your message handler code here and/or call default

……
[/Quote]
Eleven 2011-04-26
  • 打赏
  • 举报
回复
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);
}
King_hhuang 2011-04-26
  • 打赏
  • 举报
回复
就是从CEdit派生一个类CEditEx,然后在CEditEx中处理OnChar

void 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;)
oysoft 2011-04-26
  • 打赏
  • 举报
回复
如果是float型的变量,MFC会调用下面代码,一定会弹出“请输入一个数字”提示框

if (!_AfxSimpleFloatParse(szBuffer, d))
{
AfxMessageBox(AFX_IDP_PARSE_REAL);
pDX->Fail(); // throws exception
}

要想不弹出,就定义一个CString变量,然后自己使用
float atof(const char *string);
函数转换
lin152 2011-04-26
  • 打赏
  • 举报
回复
你是不是把这两个 edit ctrl 都选中了 only number(只能是数字)的属性阿。
如果是的话,取消它们。
youzhj 2011-04-26
  • 打赏
  • 举报
回复
劳驾能直接给代码吗,我确实不懂重载啥的,就是现学现用,需要编一个输入框,以方面项目上使用。
King_hhuang 2011-04-26
  • 打赏
  • 举报
回复
重载Edit,在OnChar中判断

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧