問題一.如何是ED99v支持小數(shù)的輸入.
一般的ED99v控件支持很多格式的輸入,如果要支持數(shù)據(jù)的輸入的話,你可以修改ED99v控件屬性,選中NUMBER屬性就可以了,但是這樣不支持.號的輸入,也就是不支持小數(shù)的輸入了.
這里的解決方法是派生一個類CED99v,然后映射消息EN_CHANGE,因為如果你的控件使用這個派生類的話,在你進行你的ED99v控件進行輸入字符改變的時候都會觸發(fā)這個事件,不用為你的控件每個觸發(fā)EN_CHANGE事件了.然后判斷新輸入的字符,如果這個字符符合數(shù)字規(guī)則或者.號規(guī)則,再計算已經(jīng)出現(xiàn)的.號次數(shù),當符合這種條件時允許輸入操作,否則刪除剛輸入的字符,進行重新設(shè)置編輯框字符串的操作.
可能涉及到的問題,1:如何判斷一個字符串是數(shù)字還是別的類型.2:如何查找一個字符串中某個符號出現(xiàn)的次數(shù).3:如何設(shè)置ED99v光標的位置.
1 問題的解決方法可以利用下面的方法解決.
CString strtemp=szTemp.SpanIncluding("0123456789");
if(!strtemp.IsEmpty())
//這個字符串為數(shù)字
else
//非數(shù)字
2 問題我用循環(huán)遞歸的方法實現(xiàn),首先查找最先出現(xiàn)的符號位置,然后利用字符串分割技術(shù)取RIGHT部分再進 行循環(huán)調(diào)用就可以了,相關(guān)代碼可以見下:
int CNumEditCtrl::GetStringNum(CString szVal)//獲得字符串中間.號的個數(shù)
{
int nNum=0;
while(1)
{
int nCount=szVal.Find(’.’);
if(nCount==-1)
break;
szVal=szVal.Right(szVal.GetLength()-nCount-1);
nNum++;
}
return nNum;
}
一般的ED99v控件支持很多格式的輸入,如果要支持數(shù)據(jù)的輸入的話,你可以修改ED99v控件屬性,選中NUMBER屬性就可以了,但是這樣不支持.號的輸入,也就是不支持小數(shù)的輸入了.
這里的解決方法是派生一個類CED99v,然后映射消息EN_CHANGE,因為如果你的控件使用這個派生類的話,在你進行你的ED99v控件進行輸入字符改變的時候都會觸發(fā)這個事件,不用為你的控件每個觸發(fā)EN_CHANGE事件了.然后判斷新輸入的字符,如果這個字符符合數(shù)字規(guī)則或者.號規(guī)則,再計算已經(jīng)出現(xiàn)的.號次數(shù),當符合這種條件時允許輸入操作,否則刪除剛輸入的字符,進行重新設(shè)置編輯框字符串的操作.
可能涉及到的問題,1:如何判斷一個字符串是數(shù)字還是別的類型.2:如何查找一個字符串中某個符號出現(xiàn)的次數(shù).3:如何設(shè)置ED99v光標的位置.
1 問題的解決方法可以利用下面的方法解決.
CString strtemp=szTemp.SpanIncluding("0123456789");
if(!strtemp.IsEmpty())
//這個字符串為數(shù)字
else
//非數(shù)字
2 問題我用循環(huán)遞歸的方法實現(xiàn),首先查找最先出現(xiàn)的符號位置,然后利用字符串分割技術(shù)取RIGHT部分再進 行循環(huán)調(diào)用就可以了,相關(guān)代碼可以見下:
int CNumEditCtrl::GetStringNum(CString szVal)//獲得字符串中間.號的個數(shù)
{
int nNum=0;
while(1)
{
int nCount=szVal.Find(’.’);
if(nCount==-1)
break;
szVal=szVal.Right(szVal.GetLength()-nCount-1);
nNum++;
}
return nNum;
}