2017-08-18 26 views
0

CEditコントロールのプロパティに「番号」というオプションがあるので、ユーザーがこのテキストボックスに非桁の文字を入力するのを防ぐことができます。 オプション '番号'がある場合、おそらくオプション '番号'のような単純なCEditの先行ゼロを削除する方法があると思います。MFC - CEdit番号コントロールの先行ゼロを削除します

私は、自動的に先行ゼロを削除することを期待してDialog Data Exchangeを試しましたが、それはできません。

次に、これを行う方法は、各CEdit番号コントロールのEN_KILLFOCUSメッセージを追加することだと思いますが、それは使い果たされています。

私はEN_KILLFOCUSを追加するより良い方法だと思うが、すべてのCEdit番号コントロールは、現在のコントロールの先頭のゼロを削除するこの関数でフォーカスイベントポイントを1つの機能を失うが、C# C++で '現在の'コントロールを取得できますが、サポートされているかどうかはわかりません。

CEditを継承するCEditを継承してフォーカスを失う実装は先行ゼロを削除しますが、このソリューションではVisual Studioデザインウィンドウでデザインすることはできません。私はより良い方法がある場合は、私が確認する(EN_KILLFOCUS)の最終的な解決策を適用する前に、とにかく

(&ドロップ問題を描画するためのソリューションがある)this solutionと同様のソリューションがある願っています - 少なくともは、再利用を実装しますMFCの既存の実装

ちょっと説明して先行ゼロを削除する:CE001コントロールに00001を入力してフォーカスを失った場合、CEditコントロールには次のように表示されます。1.そのセルに数値を入力すると、MS Excelのようになります。

答えて

0

「が、すべてのCEditの数のコントロールは、一つの機能にフォーカスイベントポイントを失う」真である

、しかし、あなただけのパラメータとしてフォーカスを失ったコントロールのコントロールIDを取得します。

これをメッセージテーブルに追加し、IDC_FIRST、IDC_LASTを編集コントロールの最初と最後のIDに置き換えるか、すべて0に0xFFFFFFFFを使用します。

ON_CONTROL_RANGE(EN_KILLFOCUS, IDC_FIRST, IDC_LAST, OnKillFocus). 

ここには、OnKillFocusの署名と、変更を適用するためのCWndの取得方法が記載されています。

void CMyDialogClass::OnKillFocus(UINT nID) 
{ 
    // you can further check if the ID is one of interest here... 
    // if your edit control control IDs are not contiguous, for example. 

    // you can get a CEdit* here, but only if you used DDX to map the 
    // control to a CEdit. 
    CWnd* pCtrl = GetDlgItem(nID); 
    if (pCtrl) 
    { 
     CString str; 
     pCtrl->GetWindowText(str); 
     // remove zeroes, or format as you like.... 
     str.Format(_T("%d"), _tcstoi(str)); 
     pCtrl->SetWindowText(str); 
    } 
} 

// if you mapped the control to a CEdit, here's how you can safely   
// get a pointer to a CEDit 

CEdit* pEdit = (CEdit*)GetDlgItem(nID); 
ASSERT_KINDOF(CEdit, pEdit); // debug check 
if (pEdit && pEdit->IsKindOf(RUNTIME_CLASS(CEdit))) // standard check 
{ 
// .... 
} 
関連する問題