查找 wxMenu 的选定单选项
Finding a wxMenu's Selected Radio Item
假设我在 wxMenu
中有一组单选项目。我知道在任何给定时间都会检查其中一个。
wxMenu
或其他构造是否保留选中项的索引,或者我是否需要在每个单选项上调用 isChecked
直到找到选中元素以找到它索引?
我已经问过 如何做到这一点,但我更希望 wxWidgets 让我免于到处这样做。
自己动手很容易。
为每个按钮绑定一个事件处理程序到 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();
不,保存最后选择的项目的索引(如 所示)或使用 wxMenuBarBase::IsChecked()
直到找到所选的单选按钮是唯一的方法。
为了让 wxWidgets 提供对当前选定按钮的访问,它不仅需要存储它(这意味着不要忘记不仅在选定的更改时更新,而且在从 into/deleted 插入项目时更新菜单,所以它已经不是完全微不足道了),但要以某种方式提供对您感兴趣的无线电项目组的访问,这需要能够识别它,目前没有办法做到这一点并且添加它不会要特别简单。
然而,可以轻松 编写一个可重复使用的函数int GetIndexOfSelectedRadioItem(int firstItem)
,该函数将从给定项目开始并在后续项目上调用IsChecked()
直到它 return 为真并且 return 项目的偏移量。你应该能够在你自己的代码中完成它,但是如果你想在 wxWidgets 本身中包含这样的功能(作为静态 wxMenuBar
方法,可能),请不要犹豫发送 patches/pull 请求这样做!
假设我在 wxMenu
中有一组单选项目。我知道在任何给定时间都会检查其中一个。
wxMenu
或其他构造是否保留选中项的索引,或者我是否需要在每个单选项上调用 isChecked
直到找到选中元素以找到它索引?
我已经问过
自己动手很容易。
为每个按钮绑定一个事件处理程序到 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();
不,保存最后选择的项目的索引(如 wxMenuBarBase::IsChecked()
直到找到所选的单选按钮是唯一的方法。
为了让 wxWidgets 提供对当前选定按钮的访问,它不仅需要存储它(这意味着不要忘记不仅在选定的更改时更新,而且在从 into/deleted 插入项目时更新菜单,所以它已经不是完全微不足道了),但要以某种方式提供对您感兴趣的无线电项目组的访问,这需要能够识别它,目前没有办法做到这一点并且添加它不会要特别简单。
然而,可以轻松 编写一个可重复使用的函数int GetIndexOfSelectedRadioItem(int firstItem)
,该函数将从给定项目开始并在后续项目上调用IsChecked()
直到它 return 为真并且 return 项目的偏移量。你应该能够在你自己的代码中完成它,但是如果你想在 wxWidgets 本身中包含这样的功能(作为静态 wxMenuBar
方法,可能),请不要犹豫发送 patches/pull 请求这样做!