找到wxMenu的选定无线电项目

时间:2016-10-13 19:03:52

标签: c++ indexing menu wxwidgets radio-group

假设我在wxMenu中有一组广播项目。我知道在任何时候都会检查其中一个。

wxMenu或其他构造是否保留在已检查项目的索引上,或者我是否需要在每个单选项上调用isChecked,直到找到已检查元素才能找到它的索引?

我已经问过this question如何做到这一点,但是我更喜欢wxWidgets让我无法在任何地方这样做。

2 个答案:

答案 0 :(得分:1)

滚动你自己很容易。

为每个按钮绑定一个事件处理程序到wxEVT_COMMAND_RADIOBUTTON_SELECTED。在处理程序中,提取所选单选按钮的ID并将其存储在某处。

像这样:

    ResolMenu = new wxMenu();
    ResolMenu->AppendRadioItem(idRcvLoRez,"Low Resolution");
    ResolMenu->AppendRadioItem(idRcvMeRez,"Medium Resolution");
    ResolMenu->AppendRadioItem(idRcvHiRez,"High Resolution");
    ResolMenu->Check( idRcvLoRez, true );
    Bind(wxEVT_MENU,&cFrame::onRcvRez,this,idRcvLoRez);
    Bind(wxEVT_MENU,&cFrame::onRcvRez,this,idRcvMeRez);
    Bind(wxEVT_MENU,&cFrame::onRcvRez,this,idRcvHiRez);


void onRcvRez( wxCommandEvent& event )
{
    myRezID = event.GetId();

答案 1 :(得分:1)

不,保存最后一个选定项目的索引(如ravenspoint's answer所示)或使用#attributes: array:13 [▼ "id" => 7 "created_at" => "2016-10-15 19:46:04" "updated_at" => "2016-10-15 19:47:11" "publish_at" => "2016-10-15 19:46:00" "title" => "news OLD title" "slug" => "news-old-title" "content" => "<p>news OLD content</p>" "lead" => "" #original: array:13 [▼ "id" => 7 "created_at" => "2016-10-15 19:46:04" "updated_at" => "2016-10-15 19:46:21" "publish_at" => "2016-10-15 19:46:00" "title" => "news OLD title" "slug" => "news-old-title" "content" => "<p>news OLD content</p>" ,直到找到所选的单选按钮是唯一的方法。

对于wxWidgets提供对当前所选按钮的访问,它不仅需要存储它(这意味着不仅忘记更新所选的更改,而且当项目插入/删除菜单时,所以它是已经不是完全无关紧要了),但以某种方式提供对你感兴趣的无线电项目组的访问,这需要能够识别它并且目前没有办法做到这一点并且添加它不会特别简单

可以做什么轻松然而,正在编写一个可重用的函数wxMenuBarBase::IsChecked(),它将从给定的项开始,并在后续项上调用int GetIndexOfSelectedRadioItem(int firstItem),直到它返回true并且返回项目的偏移量。您应该可以在自己的代码中执行此操作,但是如果您希望在wxWidgets本身中包含此类函数(可能是静态IsChecked()方法),请不要犹豫,发送补丁/请求这样做!