【问题标题】:How to have a wxButton destroy itself?如何让 wxButton 自行销毁?
【发布时间】:2018-11-12 18:45:50
【问题描述】:

我的窗口中有一个 wxButton,我是 binding,其中包含以下内容:

BitmapButton1->Bind(wxEVT_BUTTON, [=](wxCommandEvent& e)
{
    if(TextCtrl1)
        OptionsSizer->Detach(TextCtrl1);
    if(Choice1)
        OptionsSizer->Detach(Choice1);
    if(BitmapButton1)
        OptionsSizer->Detach(BitmapButton1);

    if(TextCtrl1)
        TextCtrl1->Destroy();
    if(Choice1)
        Choice1->Destroy();
    if(BitmapButton1)
        BitmapButton1->Destroy();

    OptionsSizer->Layout();
    OptionsWindow->SetSizer(OptionsSizer);
    SendSizeEvent();

}, bId);

这个想法是,当单击按钮时,它会删除自身以及其他几个控件。然而,上述崩溃。我尝试过调试,但调试器似乎无法获取我的断点(我发现 wxWidgets 很常见)。

【问题讨论】:

  • 我认为您不应该在control 本身上使用Destroy,而是重新排列您想要保留的框架/对话框上的控件,而无需销毁您想要销毁的控件。
  • @NeomerArcana,你为什么要摧毁它?隐藏按钮然后调用 Layout() 可能会更好,即使您不打算再次显示它。

标签: c++11 wxwidgets


【解决方案1】:

执行 lambda 后,原始指针将悬空,带有不正确的非 NULL 值。它们也在其他地方使用吗? 一般来说,您需要为此类问题提供更多信息,例如更多代码、堆栈跟踪、构建类型 - 您显然需要调试构建才能对其进行调试,对吧?

调试器似乎无法获取我的断点(我发现 wxWidgets 很常见)

没有像wxWidgets 这样的东西可以防止调试器在调试版本中遇到断点。请确保您使用的是调试版本 - 我发现遇到此类问题的人很常见。

【讨论】:

    猜你喜欢
    • 2021-06-12
    • 2017-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-29
    • 1970-01-01
    • 2013-02-15
    • 1970-01-01
    相关资源
    最近更新 更多