mfc 固定编辑框输入上限和下限_MFC中编辑框数字限制范围
為編輯框添加 int變量的時(shí)候下面有2空可以填寫(xiě)最大值與最小值;
或者自己添加代碼DDV_MinMaxInt(pDX, m_nPort, 1, 65535);
但是這個(gè)不一定要工作。
解決方法:給編輯框添加一個(gè)失去焦點(diǎn)(killfocus)的消息,在里面UpdateData(TRUE)一下就搞定。
原因是當(dāng)失去焦點(diǎn)時(shí)候,同步一下窗體和相關(guān)變量的值,這樣子系統(tǒng)才能正確判斷是否超過(guò)設(shè)定的范圍。
不過(guò)又出現(xiàn)另一個(gè)原因,只要你輸入的值不在 設(shè)定范圍里,那么你的焦點(diǎn)就不能離開(kāi)控件,因?yàn)闀?huì)一直彈窗提示的。
解決方法:去掉DDV_MinMaxInt(pDX, m_nPort, 1, 65535),在killfocus函數(shù)里自己寫(xiě)代碼判斷。
{
UpdateData(TRUE);
if ((m<0) || (m>65535))
{
MessageBoxW(NULL, L"數(shù)值超過(guò)范圍!", L"錯(cuò)誤", MB_OK);
m = 0;
UpdateData(FALSE);
}
}
注:其實(shí)這樣做和第一種沒(méi)什么區(qū)別,只是更靈活一些。CString類(lèi)型變量可以設(shè)定字串長(zhǎng)度。
補(bǔ)充:經(jīng)過(guò)TechWalker提醒,程序用戶(hù)可能在輸入之后沒(méi)有讓編輯框失去焦點(diǎn),而是直接按回車(chē)鍵進(jìn)入下一步操作,那么本文上面所說(shuō)的則會(huì)有問(wèn)題。于是我搜索了一下,應(yīng)該用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);
}
}
總結(jié)
以上是生活随笔為你收集整理的mfc 固定编辑框输入上限和下限_MFC中编辑框数字限制范围的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: mysql游标的用法及作用_Mysql
- 下一篇: SQLite学习手册(数据表和视图)