Как получить виджет по идентификатору в wxWidgets? - PullRequest
4 голосов
/ 14 июня 2011

Я довольно новичок в C ++ и wxWidgets.

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

Мой вопрос заключается в том, как получить этот текстовый элемент управления по его идентификатору.Я хотел бы изменить его значение в другой области.Нужно ли сохранять указатель на каждый виджет, который может изменить свое состояние, или есть способ получить этот указатель из его идентификатора?

Вероятно, это простой вопрос, но, думаю, я не смог найти правильные условия поиска, чтобы найти ответ.

Ответы [ 2 ]

7 голосов
/ 14 июня 2011

Возможно, вам нужна статическая функция wxWindow :: FindWindowById .Он возвращает простой указатель wxWindow, поэтому вам нужно привести его к указателю wxTextCtrl для вашего примера.

1 голос
/ 14 июня 2011

Вы уверены, что хотите получить текстовый элемент управления по его идентификатору из другой области?

Я думаю, что более чистое решение - создать класс Window / Dialog, содержащий wxTextCtrl. Тогда у этого нового класса должен быть указатель на wxTextCtrl, который он содержит. Затем добавьте функцию-член в класс Window / Dialog для настройки текста. Что-то вроде:

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

Таким образом вам не нужно находить элемент управления по идентификатору, вам не нужно приводить и не нужно использовать идентификатор для текстового элемента управления в другой области.

...