ID_BUTTON未使用常量表达式初始化

时间:2016-11-11 10:32:30

标签: c++ wxwidgets

我想在我的应用程序中使用“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键激活按钮吗?

1 个答案:

答案 0 :(得分:2)

虽然PortsDialog::ID_BUTTON1在您无法更改的方式上是常量,但它不是编译时常量。它的值在编译时不固定,它在运行时初始化。

switch中的个案必须是编译时常量。

您无法在此使用switch,但必须使用ifelse if链。