Поиск выбранного радиообъекта от wxMenu

Допустим, у меня есть группа радиоэлементов в wxMenu. Я знаю, что точно один из них будет проверен в любой момент времени.

Ли wxMenu или какая-то другая конструкция удерживает индекс проверенного элемента, или мне нужно вызвать isChecked на каждый элемент радио, пока я не найду проверенный элемент, чтобы найти его индекс?

Я спросил this question о том, как это сделать, но я бы предпочел, чтобы wxWidgets спас меня от этого везде.

0

Решение

Нет, сохранение индекса последнего выбранного элемента (как показано в ответ ravenspoint) или используя wxMenuBarBase::IsChecked() пока вы не найдете выбранную радио-кнопку, это единственный способ сделать это.

Чтобы wxWidgets предоставлял доступ к выбранной в данный момент кнопке, он должен был бы не только сохранить ее (что означает не забывать обновлять не только когда выбранные изменения, но также и когда элементы вставляются / удаляются из меню, поэтому это уже не полностью тривиально), но чтобы каким-то образом обеспечить доступ к интересующей вас группе радиоэлементов, что потребовало бы возможности идентифицировать ее, и в настоящее время нет способа сделать это, и добавить ее не будет особенно просто.

Что можно сделать без труда, однако пишет многоразовую функцию int GetIndexOfSelectedRadioItem(int firstItem) что бы начать с данного пункта и вызвать IsChecked() на последующих элементах, пока он не вернет true и не вернет смещение элемента. Вы должны быть в состоянии сделать это в своем собственном коде, но если вы хотите включить такую ​​функцию в сам wxWidgets (как статический wxMenuBar Способ, вероятно), пожалуйста, не стесняйтесь, присылайте патчи / запросы извлечения, делая это!

1

Другие решения

Достаточно легко свернуть свое собственное.

Привязать обработчик событий к wxEVT_COMMAND_RADIOBUTTON_SELECTED для каждой кнопки. В обработчике извлеките идентификатор выбранной радиокнопки и сохраните его где-нибудь.

Как это:

    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

По вопросам рекламы [email protected]