【问题标题】:How do I get a widget by id in wxWidgets?如何在 wxWidgets 中通过 id 获取小部件?
【发布时间】:2011-09-14 08:45:47
【问题描述】:

我对 C++ 和 wxWidgets 还是很陌生。

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

我的问题是如何通过其 ID 获取该文本控件。我想在不同的范围内改变它的价值。 我是否需要保留一个指向每个可能改变其状态的小部件的指针,或者有没有办法从它的 ID 中获取该指针?

这可能是一个简单的问题,但我想我找不到正确的搜索词来找到答案。

【问题讨论】:

  • 手边没有带 wx 的机器,但 wxWindow::FindWindow & co 应该可以解决问题。

标签: c++ user-interface wxwidgets


【解决方案1】:

您确定要通过它的 ID 从不同的范围获取文本控件吗?

我认为更简洁的解决方案是创建一个包含 wxTextCtrl 的 Window/Dialog 类。然后这个新类应该有一个指向它包含的 wxTextCtrl 的指针。 然后在 Window/Dialog 类中添加一个成员函数来设置文本。比如:

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

这样,您不必按 ID 查找控件,不必强制转换,也不必在不同范围内为文本控件使用 ID。

【讨论】:

    【解决方案2】:

    您可能需要静态函数wxWindow::FindWindowById。它返回一个普通的 wxWindow 指针,因此您必须将它转换为您的示例的 wxTextCtrl 指针。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-12
      • 1970-01-01
      • 2016-06-17
      • 1970-01-01
      • 1970-01-01
      • 2013-03-21
      相关资源
      最近更新 更多