wxRadioBox
Introduction
The wxRadioBox (wxWidgets: wxRadioBox Class Reference) control presents a list of mutually exclusive choices. An example of a wxRadioBox control is shown in Figure 1 below.
Example
Our first example shows a wxRadioBox control with 3 options. The selected option is displayed in a wxTextCtrl control. The example is a simple modification of the MinimalApp2 example we presented in the minimal application tutorial. The full source for this example is available from our GitHub repository: wxWidgetsTutorials/StandardControls/WxRadioBox1.
The source files are shown below. The following modifications were made:
- A wxTextCtrl and wxRadioBox have been added to the frame.
- The OnRadioBoxChange method is the event handler for the radiobox. It updates the text of the wxTextCtrl.
- The event table links the radiobox and its event handler.
#ifndef _TUTORIALS_WXWIDGETS_WXRADIOBOX1FRAME_H_ #define _TUTORIALS_WXWIDGETS_WXRADIOBOX1FRAME_H_ #include <wx/frame.h> #include <wx/radiobox.h> #include <wx/textctrl.h> class WxRadioBox1Frame : public wxFrame { public: WxRadioBox1Frame(const wxString& title); private: void OnRadioBoxChange(wxCommandEvent& evt); private: wxRadioBox* m_radioBox; wxTextCtrl* m_textctrl; wxDECLARE_EVENT_TABLE(); }; #endif
#include "WxRadioBox1Frame.h" #include "WindowIDs.h" #include <wx/panel.h> #include <wx/sizer.h> WxRadioBox1Frame::WxRadioBox1Frame(const wxString& title) : wxFrame(NULL, wxID_ANY, title), m_textctrl(0) { // Create a top-level panel to hold all the contents of the frame wxPanel* panel = new wxPanel(this, wxID_ANY); // Create the wxRadioBox control wxArrayString choices; choices.Add("Option 1"); choices.Add("Option 2"); choices.Add("Option 3"); m_radioBox = new wxRadioBox(panel, wxID_RADIOBOX, "Select one of the options", wxDefaultPosition, wxDefaultSize, choices, 3, wxRA_VERTICAL); // Create a wxTextCtrl that will show the currently // selected option m_textctrl = new wxTextCtrl(panel, wxID_ANY, m_radioBox->GetString(m_radioBox->GetSelection()), wxDefaultPosition, wxSize(140, wxDefaultCoord)); // Set up the sizer for the panel wxBoxSizer* panelSizer = new wxBoxSizer(wxVERTICAL); panelSizer->Add(m_radioBox, 1, wxEXPAND | wxALL, 15); panelSizer->Add(m_textctrl, 0, wxCENTER); panelSizer->AddSpacer(15); panel->SetSizer(panelSizer); // Set up the sizer for the frame and resize the frame // according to its contents wxBoxSizer* topSizer = new wxBoxSizer(wxVERTICAL); topSizer->SetMinSize(215, 50); topSizer->Add(panel, 1, wxEXPAND); SetSizerAndFit(topSizer); } void WxRadioBox1Frame::OnRadioBoxChange(wxCommandEvent& evt) { wxString text = m_radioBox->GetString(evt.GetSelection()); m_textctrl->SetValue(text); } wxBEGIN_EVENT_TABLE(WxRadioBox1Frame, wxFrame) EVT_RADIOBOX(wxID_RADIOBOX, WxRadioBox1Frame::OnRadioBoxChange) wxEND_EVENT_TABLE()
The application is shown below. Figure 2 shows the application at startup and Figure 3 shows it after the selected option has been changed to option 2. You can see that the value of the wxTextCtrl is updated when the selection option is changed.
The rest of the source files don't contain significant changes but are shown here for completeness.
#ifndef _TUTORIALS_WXWIDGETS_WINDOWIDS_H_ #define _TUTORIALS_WXWIDGETS_WINDOWIDS_H_ #include <wx/defs.h> const wxWindowID wxID_RADIOBOX = wxID_HIGHEST + 1; #endif
#ifndef _TUTORIALS_WXWIDGETS_WXRADIOBOX1APP_H_ #define _TUTORIALS_WXWIDGETS_WXRADIOBOX1APP_H_ #include <wx/app.h> class WxRadioBox1App : public wxApp { public: virtual bool OnInit(); }; #endif
#include "WxRadioBox1App.h" #include "WxRadioBox1Frame.h" wxIMPLEMENT_APP(WxRadioBox1App); bool WxRadioBox1App::OnInit() { WxRadioBox1Frame* frame = new WxRadioBox1Frame("WxRadioBox1"); frame->Show(true); return true; }