【问题标题】:wxGridSizer / wxPanel : make left/right navigation key behave like shift-tab/tabwxGridSizer / wxPanel : 使左/右导航键表现得像 shift-tab/tab
【发布时间】:2017-09-30 11:32:17
【问题描述】:

我正在使用wxWidget。我有 panel 和 4 个按钮,并使用 wxGridSizer 将它们放入网格中。当我转到该行的最右边的单元格并按Right key 时,焦点仍然在同一个小部件上。我可以设置一些属性,其中Right/Left 角落处的键用作选项卡和 shift-tab。

我想要的是用户应该能够通过 4 个按钮通过按左右键来circle。我想将向上/向下键用于其他目的。

如果有帮助,这里是代码:

#include <wx/wx.h>
#include <wx/grid.h>
#include <wx/sizer.h>
#include <wx/string.h>

#include <iostream>
#include <cassert>

class ReachItFrame : public wxFrame
{
public:
  ReachItFrame(const wxString& title) : wxFrame()
  {
    Create(NULL, wxID_ANY, title, wxDefaultPosition, wxSize(250, 150));
  }
};

class MyApp : public wxApp
{
public:
  bool OnInit()
  {
    ReachItFrame *reachIt = new ReachItFrame(wxT("ReachIt"));
    reachIt->Show(true);
    assert(reachIt->SetTransparent(150));
    assert(reachIt->ShowFullScreen(true, wxFULLSCREEN_ALL));

    wxPanel *panel = new wxPanel(reachIt);
    wxGridSizer *sizer = new wxGridSizer(2, 2, 0, 0);

    wxButton *button1 = new wxButton(panel, wxID_ANY, wxString::FromAscii("1"));
    sizer->Add(button1, wxSizerFlags().Expand());

    wxButton *button2 = new wxButton(panel, wxID_ANY, wxString::FromAscii("2"));
    sizer->Add(button2, wxSizerFlags().Expand());

    wxButton *button3 = new wxButton(panel, wxID_ANY, wxString::FromAscii("3"));
    sizer->Add(button3, wxSizerFlags().Expand());

    wxButton *button4 = new wxButton(panel, wxID_ANY, wxString::FromAscii("4"));
    button4->MoveBeforeInTabOrder(button3);
    sizer->Add(button4, wxSizerFlags().Expand());

    panel->SetSizerAndFit(sizer);

    return true;
  }
};

wxIMPLEMENT_APP(MyApp);

【问题讨论】:

    标签: c++ wxwidgets


    【解决方案1】:

    没有对此的内置支持,但是您可以在您的 wxEVT_CHAR 处理程序中自己捕获 WXK_RIGHTWXK_LEFT 并在那里做任何您想做的事情。您可以查看wxGrid::DoGridProcessTab() 以获取您可能想要做的示例,例如注意那里使用的帮助器 MoveCursor{Left,Right}()GoToCell() 方法。

    【讨论】:

    • 我的意思错了。我没有使用 wxGrid,而是使用 wxGridSizer。我应该把 wxEVT_CHAR 句柄放在哪个类中
    • 我将 wxEVT_CHAR 处理程序添加到 Panel,但它没有收到任何事件。
    • 好的,我将onchar 处理程序放在class derived from button 中,它正在获取tab 事件。但是按钮在层次结构中处于较低级别,我无法决定哪个应该在该级别获得下一个焦点。跳过按钮的OnChar 中的事件不会将事件提供给其父面板的 onchar
    • 但是你可以要求按钮的父级给你移动到的控制权,对吧?
    • @Ripi2 但这将是 hacky.. 我不应该在父级中对next control 有这个逻辑吗?我会用左/右键看看边缘会发生什么。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-12
    • 2011-09-22
    • 2017-06-11
    • 1970-01-01
    相关资源
    最近更新 更多