紧急问题,希望能够给我完整例子——只能输入数字(包括小数)的EDIT

jisheng 2002-05-08 05:22:08
我现在在线,谁能够帮帮我,真是感激不尽,立刻给分。
...全文
37 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
doyd 2002-05-08
  • 打赏
  • 举报
回复
啊啊啊啊啊啊啊,我来晚了

添加一个控件IDC_EDIT1
在class wizard中
添加一个IDC_EDIT1对应的变量m_strData
这时在doDataExchange()中多了一条:DDX_Text(pDX, IDC_EDIT1, m_strData);
这是进行数据交换的;

添加另一个变量m_strDataOut
构造函数中
m_strData = _T("");
m_strDataOut = _T("") ;

在函数
OnChangeEdit1()中
void CNumEditDlg::OnChangeEdit1()
{
this->GetDlgItemText( IDC_EDIT1 ,m_strDataOut ) ;
int nLen =m_strDataOut.GetLength( ) ;
unsigned short nChar = m_strDataOut.GetAt( nLen - 1 ) ;

if ( nChar == 48 ||
nChar == 49 ||
nChar == 50 ||
nChar == 51 ||
nChar == 52 ||
nChar == 53 ||
nChar == 54 ||
nChar == 55 ||
nChar == 56 ||
nChar == 57 ||
nChar == 46
)
{
UpdateData( TRUE ) ;
UpdateData( FALSE );
}
else
{
UpdateData( FALSE );
UpdateData( TRUE ) ;
}
}
jisheng 2002-05-08
  • 打赏
  • 举报
回复
谢谢大家的帮助。
pcman1990 2002-05-08
  • 打赏
  • 举报
回复
哈,高分买个省事吧
pcman1990 2002-05-08
  • 打赏
  • 举报
回复
同意legerwu(Leger)
kingzai 2002-05-08
  • 打赏
  • 举报
回复
派生一个自己的EDIT,然后为EDIT的基类。关键的也就几行,
void CNumEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: Add your message handler code here and/or call default
if (nChar == 8)
CEdit::OnChar(nChar, nRepCnt, nFlags);

POINT caret;
::GetCaretPos (&caret);
caret.x = LOWORD (CharFromPos (caret));

CString text;
GetWindowText (text);

if (isdigit(nChar))
CEdit::OnChar(nChar, nRepCnt, nFlags);
else if (nChar == '-')
{
if (!caret.x)
{
if (((text.GetLength() > 0) && (text[0]!='-')) || (text.GetLength()==0))
CEdit::OnChar(nChar, nRepCnt, nFlags);
}
else
{
if ((text [caret.x-1] == 'e') || (text [caret.x-1] == 'E'))
CEdit::OnChar(nChar, nRepCnt, nFlags);
}
}

else if ((nChar == 'e') || (nChar == 'E'))
{
if ((caret.x == 1) && (text[0] == '-'))
return ;

if (caret.x)
{
for (int i=0; i<text.GetLength(); i++)
{
if ((text[i] == 'e') ||(text[i] == 'E'))
return ;
}
CEdit::OnChar(nChar, nRepCnt, nFlags);
}
}

else if (nChar == '.')
{
for (int i=0; i<text.GetLength(); i++)
{
if (text[i] == '.')
return ;
}

for (i=0; i<text.GetLength(); i++)
{
if (((text[i] == 'e') ||(text[i]=='E')) && (caret.x > i))
return ;
}

CEdit::OnChar(nChar, nRepCnt, nFlags);
}
}
qiuanhong 2002-05-08
  • 打赏
  • 举报
回复
刚刚找到一个方法:
加入该EDIT控件的消息EN_UPDATE对应的处理函数(每当你输入一个字符,都会调用此函数)
在该函数中进行对输入字符进行判断。

呵呵~~~~~~~~~下班了,代码要的话,可以跟我联系,发短信息吧

LegerWu 2002-05-08
  • 打赏
  • 举报
回复
这个问题值200分?

其实你只需要对该控件加一个EN_CHANGE消息函数,在该函数中判断用户是否输入了非数字字符就可以了.
flywolfman 2002-05-08
  • 打赏
  • 举报
回复
发送完成!请查收
storein 2002-05-08
  • 打赏
  • 举报
回复
同意 : liu_feng_fly(谁动了我的~~~~~~~~工资) (
qiuanhong 2002-05-08
  • 打赏
  • 举报
回复
agree UP liu_feng_fly(谁动了我的~~~~~~~~工资)
zhuwenzheng 2002-05-08
  • 打赏
  • 举报
回复
我也要,zhuwz_bill@sohu.com
谢谢
jisheng 2002-05-08
  • 打赏
  • 举报
回复
给我也好,我的Email是peanut21cn@sina.com
非常感谢,等你的好消息。
liu_feng_fly 2002-05-08
  • 打赏
  • 举报
回复
最简单的方法是给这个EDIT添加一个成员变量,通过ClassWizard,然后把变量的类型选着为Value,并且是float型
flywolfman 2002-05-08
  • 打赏
  • 举报
回复
我记得在codeguru的edit专栏中有。我也可以发给你一个。

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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