因为对wxWidgets不熟,这几天为了回车等热键的问题抓破头了。。。
问题描述:
我的登录窗体里有以下控件:
2个wxTextCtrl(帐号密码输入框),1个wxButton(登录按钮)
要实现不管在什么时候按回车,都和鼠标点击登录按钮一个效果。
但实际上,默认情况下,我们在wxTextCtrl中按回车的时候,焦点会直接跳到下一个控件上,就和Tab键效果一样。
因为我还要监控wxTextCtrl的输入字符是否合法,所以为这个查了很多资料。
具体解决方法:
解决回车键的问题:只要在程序初始控件后,将wxButton设置为默认按钮即可。
loginButton = new wxButton(bottomButtonPanel, ID_WXBUTTON1, wxT("登录"), wxPoint(266, 8), wxSize(75, 25), 0, wxDefaultValidator, wxT("loginButton"));
settingButton = new wxButton(bottomButtonPanel, ID_WXBUTTON2, wxT("网络设置"), wxPoint(10, 8), wxSize(75, 25), 0, wxDefaultValidator, wxT("settingButton"));loginButton->SetDefault();
解决过滤非法字符输入的问题:
方法1:响应wxKeyEvent
BEGIN_EVENT_TABLE(VKLoginDlg,wxDialog)
……
EVT_KEY_DOWN(VKLoginDlg::OnKeyDown)
……
END_EVENT_TABLE()/*
* OnKeyDown
*/
/*
* OnKeyDown
*/
void VKLoginDlg::OnKeyDown(wxKeyEvent& event)
{
const int keycode = event.GetKeyCode();
if(keycode>'0' && keycode<'9')
{
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;
}
}
方法2:用wxTextValidator限制
wxTextValidator validator(wxFILTER_NUMERIC);
new wxTextCtrl( this, wxID_ANY, _T(""), wxDefaultPosition, wxDefaultSize, 0, validator );//这样虽然可以只输入数字,单小数点确可以输入多次,所以,之后还要响应 wxEVT_COMMAND_TEXT_UPDATED 事件,该事件在文本框内容改变后发生。
/*
* WxEdit2Updated
*/
void test1Dlg::WxEdit2Updated(wxCommandEvent& event)
{
static wxString oldstr="";
double d;
if (NULL == WxEdit2)return;
if (WxEdit2->GetValue().ToDouble(&d) || 0== WxEdit2->GetValue().Length() )
{
oldstr =WxEdit2->GetValue();}
else
{
WxEdit2->SetValue(oldstr);
WxEdit2->SetInsertionPoint(WxEdit2->GetValue().Length());
}
}
除特别声明为转载内容外,本站所有内容均为作者原创,谢绝任何单位和个人不经许可的复制和转播!
对于确有转载需要的,请先与作者联系,在获得允许后烦请在转载时保留文章出处。
本文出自Lupin's Blog:http://www.cnzui.com/archives/352