我想在我的应用程序中使用“Enter”和“Shift”键。为此,我找到了一些代码here。
void wxWidgetsDialog::OnKey(wxKeyEvent &event)
{
wxWindow *win = FindFocus();
if(win == NULL){
event.Skip ();
return;
}
if(event.GetKeyCode()==WXK_RETURN){
switch(win->GetId()){
case ID_BUTTON1:
wxMessageBox("Button1");
break;
case ID_BUTTON2:
wxMessageBox("Button2");
break;
case ID_BUTTON3:
wxMessageBox("Button3");
Destroy();
break;
}
event.Skip ();
}
}
当我尝试使用此代码段时,我收到错误:
D:\WindowsDgps\WindowsDgpsGUI\PortsDialog.cpp|171|error: the value of 'PortsDialog::ID_BUTTON1' is not usable in a constant expression|
和
D:\WindowsDgps\WindowsDgpsGUI\PortsDialog.cpp|35|note: 'PortsDialog::ID_BUTTON1' was not initialized with a constant expression|
我做错了什么?我如何声明ID以使其工作?我使用标准实现wxWidgets自己生成。
const long PortsDialog::ID_STATICTEXT1 = wxNewId();
const long PortsDialog::ID_TEXTCTRL1 = wxNewId();
const long PortsDialog::ID_BUTTON1 = wxNewId();
const long PortsDialog::ID_TEXTCTRL2 = wxNewId();
const long PortsDialog::ID_BUTTON2 = wxNewId();
const long PortsDialog::ID_BUTTON3 = wxNewId();
const long PortsDialog::ID_PANEL1 = wxNewId();
我有什么可以做的,所以当我在StaticText字段中时,我可以使用Enter键激活按钮吗?
答案 0 :(得分:2)
虽然PortsDialog::ID_BUTTON1
在您无法更改的方式上是常量,但它不是编译时常量。它的值在编译时不固定,它在运行时初始化。
switch
中的个案必须是编译时常量。
您无法在此使用switch
,但必须使用if
和else if
链。