wxWidgets恶心的窗体回车热键

因为对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