`
dqifa
  • 浏览: 112267 次
社区版块
存档分类
最新评论

过滤wxTextCtrl控件输入的两种方法

 
阅读更多

以下两种方法实现wxTextCtrl只接收0-9的数字.

1. 使用wxTextValidator()函数

#include <wx/wx.h>

class MyApp:public wxApp
{
    public:
        virtual bool OnInit();
};

IMPLEMENT_APP(MyApp)

class MyFrame:public wxFrame
{
    public:
        MyFrame(const wxString& title);
};

bool MyApp::OnInit()
{
    MyFrame* myframe = new MyFrame("HelloWorld");
    myframe->Show();

    return true;
}

MyFrame::MyFrame(const wxString& title):wxFrame(NULL,-1,title)
{
    wxTextCtrl* text = new wxTextCtrl(this,wxID_ANY,"",wxDefaultPosition,wxDefaultSize,0,wxTextValidator(wxFILTER_DIGITS));
}

2. 从wxTextCtrl派生出新类,在新类中修改OnChar()函数.

#include <wx/wx.h>

class MyApp:public wxApp
{
    public:
        virtual bool OnInit();
};

IMPLEMENT_APP(MyApp)

class MyFrame:public wxFrame
{
    public:
        MyFrame(const wxString& title);
};

class MyTextCtrl:public wxTextCtrl
{
    public:
        MyTextCtrl(wxWindow* parent);
        virtual void OnChar(wxKeyEvent& event);
};

bool MyApp::OnInit()
{
    MyFrame* myframe = new MyFrame("HelloWorld");
    myframe->Show();

    return true;
}

MyFrame::MyFrame(const wxString& title):wxFrame(NULL,-1,title)
{
    MyTextCtrl* text = new MyTextCtrl(this);
}

MyTextCtrl::MyTextCtrl(wxWindow* parent):wxTextCtrl(parent,wxID_ANY)
{
    Connect(wxEVT_CHAR,wxKeyEventHandler(MyTextCtrl::OnChar),NULL,this);
}

void MyTextCtrl::OnChar(wxKeyEvent& event)
{
    const int keyCode = event.GetKeyCode();

    if (keyCode >= '0' && keyCode <= '9')
    {
        // Accept a number
        event.Skip();
    }

    // Accept some other keys
    switch (keyCode)
    {
        case WXK_BACK :
        case WXK_LEFT :
        case WXK_RIGHT :
        case WXK_TAB :
        case WXK_DELETE :
        case WXK_END :
        case WXK_HOME :
            event.Skip();
        break;
    }

}

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics