我有一個CEdit文本框是屬性窗格的一部分,只允許數值(正整數)。當人們輸入非數字值時,該框可以正常工作,但當他們刪除框中的值時,會彈出一個對話框: 「請輸入正整數。」CEdit數字驗證事件C++ MFC
這種情況:
1.我有一個數字(說20)在框中。
2.我刪除號碼。
3.我得到錯誤對話框。
有人能告訴我如何攔截此事件並在其中放置默認值?
這裏是我的屬性窗格的樣子:
const int DEFAULT_VALUE = 20;
class MyPropertyPane:public CPropertyPane
{
//....
private:
CEdit m_NumericBox;
int m_value;
//....
public:
afx_msg void OnEnChangeNumericBox();
//....
}
void MyPropertyPane::MyPropertyPane()
{
// Set a default value
m_value = DEFAULT_VALUE;
}
//....
void MyPropertyPane::DoDataExchange(CDataExchange* pDX)
{
DDX_Control(pDX, IDC_NUMERIC_BOX, m_NumericBox);
// this sets the displayed value to 20
DDX_Text(pDX, IDC_NUMERIC_BOX, m_value);
}
//....
void MyPropertyPane::OnEnChangeNumericBox()
{
// Somebody deleted the value in the box and I got an event
// saying that the value is changed.
// I try to get the value from the box by updating my data
UpdateData(TRUE);
// m_value is still 20 although the value is
// deleted inside the text box.
}
但m_value仍然是20後也已被刪除......所以檢查是否m_value <1將返回false和m_value不會被設置爲默認值。彈出錯誤「請輸入正整數」出現在OnChange事件之前。 – Kiril 2009-04-13 14:57:31
實際上在DoDataExchange中修正它甚至不會超過DDX_Text(pDX,IDC_NUMERIC_BOX,m_value),所以它甚至不會觸及驗證代碼。 – Kiril 2009-04-13 15:00:49