2011-06-14 13 views
5

Soy bastante nuevo en C++ y wxWidgets.¿Cómo obtengo un widget por id en wxWidgets?

wxTextCtrl* text = new wxTextCtrl(panel, SOME_ID); 

Mi pregunta es cómo obtener ese control de texto por su ID. Me gustaría cambiar su valor en un ámbito diferente. ¿Necesito mantener un puntero a cada widget que podría haber cambiado su estado o hay alguna manera de obtener ese puntero desde su ID?

Probablemente esta sea una pregunta fácil, pero creo que no pude encontrar los términos de búsqueda correctos para encontrar una respuesta.

+4

No tiene una máquina con wx a la mano, pero 'wxWindow :: FindWindow' & co debería hacer el truco. –

Respuesta

8

Probablemente desee la función estática wxWindow::FindWindowById. Devuelve un puntero wxWindow simple por lo que tendrá que convertirlo en un puntero wxTextCtrl para su ejemplo.

1

¿Está seguro de que quiere recuperar el control de texto por su ID desde un ámbito diferente?

Creo que una solución más limpia es crear una clase Window/Dialog que contenga wxTextCtrl. Entonces esta nueva clase debería tener un puntero al wxTextCtrl que contiene. A continuación, agregue una función de miembro a la clase Ventana/Diálogo para configurar el texto. Algo así como:

class MyWindow: public wxWindow 
{ 
    public: 
     void setTextCtrlText(const wxString &str) { m_textCtrl->ChangeValue(str); }; 
    private: 
     wxTextCtrl *m_textCtrl; 
}; 

De esta manera usted no tiene que encontrar un control por ID, que no tiene que emitir y no tener que usar el ID para el control de texto en un ámbito diferente.

Cuestiones relacionadas