人较笨且记性不好,故记录在此.折叠代码打不开请F5.本博中很多是转载收录其他网友的文章(原文地址请见博文末尾),所有权为原作者所有!!!
此博客已不再更新和维护,欢迎关注我的github新博客

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: :: 管理 ::

为编辑框添加 int变量的时候下面有2空可以填写最大值与最小值;

或者自己添加代码DDV_MinMaxInt(pDX, m_nPort, 1, 65535);

但是这个不一定要工作。

解决方法:给编辑框添加一个失去焦点(killfocus)的消息,在里面UpdateData(TRUE)一下就搞定。

原因是当失去焦点时候,同步一下窗体和相关变量的值,这样子系统才能正确判断是否超过设定的范围。

不过又出现另一个原因,只要你输入的值不在 设定范围里,那么你的焦点就不能离开控件,因为会一直弹窗提示的。

解决方法:去掉DDV_MinMaxInt(pDX, m_nPort, 1, 65535),在killfocus函数里自己写代码判断。
 

{
UpdateData(TRUE);
if ((m<0) || (m>65535))
{
MessageBoxW(NULL, L"数值超过范围!", L"错误", MB_OK);
m = 0;
UpdateData(FALSE);
}
}

注:其实这样做和第一种没什么区别,只是更灵活一些。CString类型变量可以设定字串长度

补充:经过 TechWalker提醒,程序用户可能在输入之后没有让编辑框失去焦点,而是直接按回车键进入下一步操作,那么本文上面所说的则会有问题。于是我搜索了一下,应该用EN_CHANGE消息,而不是KillFocus消息。

{
// TODO: If this is a RICHEDIT control, the control will not
// send this notification unless you override the CDialog::OnInitDialog()
// function and call CRichEditCtrl().SetEventMask()
// with the ENM_CHANGE flag ORed into the mask.

// TODO: Add your control notification handler code here
UpdateData(TRUE);
if ((m_nEditNum>100) || (m_nEditNum<1))
{
m_nEditNum = 1;
UpdateData(FALSE);
}
}

更详细的资料请见: CEdit类(编辑类)成员函数及消息 http://hi.baidu.com/chaohona/blog/item/0d1d8f597486608b800a1880.html 

【参考资料 感谢作者】
mfc怎么在文本框输入时候就能获取到数据: http://zhidao.baidu.com/question/308978825.html?fr=qrl&cid=93&index=5 
编辑框CEdit自动换行简单设置: http://www.cnblogs.com/ziwuge/archive/2011/12/03/2274886.html 

posted on 2011-11-15 11:54  子坞  阅读(11403)  评论(1编辑  收藏  举报