У меня есть текстовое поле 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 вернет ложь и m_value не будет установлен в ЗНАЧЕНИЕ ПО УМОЛЧАНИЮ. Во время события OnChange появляется всплывающая ошибка «Пожалуйста, введите положительное целое число». – Kiril
На самом деле исправление .. в DoDataExchange он даже не прошел мимо DDX_Text (pDX, IDC_NUMERIC_BOX, m_value), поэтому он даже не попал бы в код проверки. – Kiril