Мне нужно удалить старые элементы из списка выбора, а затем добавить новые, но я не могу найти, как это сделать
Вы можете использовать метод wxChoice :: Clear (), чтобы удалить все записи из элемента управления выбором, и вы можете использовать метод wxChoice :: Delete (unsigned int n), чтобы удалить конкретную запись из элемента управления.
Они перечислены на странице документации в разделе «Открытые функции-члены, унаследованные от wxItemContainer».
Также, если есть лучший способ сделать такой динамический графический интерфейс, пожалуйста, скажите мне. заранее спасибо.
Один из вариантов - использовать wxUpdateUIEvent , чтобы обновить выбор, когда основной кадр простаивает. Если вы собираетесь пойти по этому пути, я бы
- добавьте член bool с именем
m_choiceNeedsUpdate
или что-то в этом роде и обработчик события void OnUpdateUI(wxUpdateUIEvent& event)
(или как вы хотите это называть) в класс формы вашего приложения.
- Свяжите обработчик событий в конструкторе кадров с помощью вызова, подобного
this->Bind(wxEVT_UPDATE_UI,&MyFrame::OnUpdateUI,this);
Когда вы делаете что-то, что требует обновления выбора, вы можете организовать его обновление с помощью вызовов, подобных этим:
m_choiceNeedsUpdate=true;
this->UpdateWindowUI();
Тело обработчика событий, где обновляется элемент управления выбором, может выглядеть примерно так
void MyFrame::OnUpdateUI(wxUpdateUIEvent& event)
{
if (m_choiceNeedsUpdate)
{
//Update the choice control here (probably using the Clear/Delete methods)
m_choiceNeedsUpdate=false;
}
}
Преимущество этого маршрута состоит в том, что вся логика, касающаяся обновления пользовательского интерфейса, может быть помещена в один метод / обработчик события. Это особенно хорошо, если у вас есть несколько элементов управления, которые могут быть динамически обновлены.
Недостатком является то, что во время работы фрейма будет много обращений к этому обработчику событий, что потенциально может повлиять на производительность. Вот почему я сохранил логику для изменения элемента управления выбором с помощью переменной bool m_choiceNeedsUpdate в приведенном выше примере.