在重写的Windows :: Forms :: MaskedTextBox :: OnKeyPress上未处理DEL或BACKSPACE

时间:2016-03-16 16:30:28

标签: c++ .net windows textbox clr

我正在构建一个需要接受某些类型字符的自定义MaskedTextBox。我用以下代码覆盖了原始类:

    ref class CustomMaskedTextBox : System::Windows::Forms::MaskedTextBox
    {
        public:
            CustomMaskedTextBox();
            virtual void OnKeyPRess(System::Windows::Forms::KeyPressEventArgs^ e) override;
    };

    CustomMaskedTextBox::CustomMaskedTextBox(void) {}
    CustomMaskedTextBox::~CustomMaskedTextBox(void) {}
    void CustomMaskedTextBox::OnKeyPress(System::Windows::Forms::KeyPressEventArgs^ e)
    {
        if ((e->KeyChar >= 'A' && e->KeyChar <= 'Z') ||
            (e->KeyChar >= '0' && e->KeyChar <= '9') ||
             e->KeyChar == '*' ||
             e->KeyChar == '-' ||
             e->KeyChar == '/' ||
             e->KeyChar == '.' ||
             e->KeyChar == ' ' ||
             e->KeyChar == (char) System::Windows::Forms::Keys::Back ||
             e->KeyChar == (char) System::Windows::Forms::Keys::Delete)
        {
            e->Handled = false;
        }
        else
        {
            e->Handled = true;
        }
    }

由于某种原因,DEL和BACKSPACE键无法识别,在对象发短信时无效。

帮助感谢DEL和BACKSPACE键的工作。

1 个答案:

答案 0 :(得分:0)

我有同样的问题。你的操作系统是什么(windows / linux / mac)? 我认为这个问题与编译器有关。我最终使用Qt来识别这些键(Qt::Key_Delete Qt::Key_Backspace)。