以下两种方法实现wxTextCtrl只接收0-9的数字.
1. 使用wxTextValidator()函数
#include
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
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;
}
}