プロパティ区画の一部であり、数値(正の整数)のみを許可する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は、それがm_value <1はfalseを返しますとm_valueに設定されることはありませんので、もしチェック...削除された後も、まだ20ですDEFAULT_VALUE。 OnChangeイベントの前にポップアップエラー「正の整数を入力してください」が発生します。 – Kiril
実際にはDoDataExchangeでDDX_Text(pDX、IDC_NUMERIC_BOX、m_value)を過ぎても検証コードにヒットしません。 – Kiril