【问题标题】:Can a subclass of wx::StaticBoxSizer handle events?wx::StaticBoxSizer 的子类可以处理事件吗?
【发布时间】:2011-03-07 09:26:03
【问题描述】:

我正在尝试将事件处理程序添加到 Wx::StaticBoxSizer 的子类,但出现以下错误:

无法在 C:/strawberry/perl/site/lib/Wx/Event.pm 第 38 行通过包“Wx::StaticBoxSizer”找到对象方法“Connect”。

这是否意味着 Wx::StaticBoxSizer 不能处理事件?如果是这样,是否有另一种方法来构造我的对象,以便它自动调整大小并处理自己的事件?

我的子类代码如下。如果需要,我也可以添加框架和应用程序类。

package my_sizer;
use base 'Wx::StaticBoxSizer';
use Wx qw(:sizer);
use Wx::Event qw(EVT_BUTTON);

sub new {
    my $ref = shift;
    my $parent = shift;

    my $self = $ref->SUPER::new(
        Wx::StaticBox->new($parent, -1, 'Box label'),
        wxHORIZONTAL
    );

    my $button = Wx::Button->new($parent, -1, 'Button');
    $self->Add($button);
    EVT_BUTTON($self, $button, \&click);

    $self->SetSizeHints($parent);

    return $self;
}

sub click { Wx::MessageBox('Click!'); }

谢谢

【问题讨论】:

  • 发布更多代码可能会让人们更有机会为您提供解决方案。作为 gui 平台,您与 Wx 的关系如何?
  • 这篇文章在 Perlmonks 上被交叉发布和回答:perlmonks.org/?node_id=846110

标签: perl wxwidgets wxperl


【解决方案1】:

http://perlmonks.org 已回答我的问题。

sizer 并不适合作为自定义控件进行子分类。相反,我需要创建自己的控件,我使用 Wx::Panel 作为我的子类。然后我在我的控件上创建了一个 Wx::StaticBoxSizer。

我的新代码:

package my_control;
use base 'Wx::Panel';
use Wx qw(:sizer :misc :id);
use Wx::Event qw(EVT_BUTTON);

sub new {
    my $ref = shift;
    my $parent = shift;
    my $self = $ref->SUPER::new($parent, wxID_ANY, wxDefaultPosition, wxDefaultSize);

    $self->{sizer} = Wx::StaticBoxSizer->new(
        Wx::StaticBox->new($self, -1, 'Box label'),
        wxHORIZONTAL
    );

    $self->{button} = Wx::Button->new($self, -1, 'Button');
    $self->{sizer}->Add($self->{button}, 1, wxEXPAND | wxALL, 10);
    EVT_BUTTON($self, $self->{button}, \&click);

    $self->SetSizerAndFit($self->{sizer});

    return $self;
}

sub click { Wx::MessageBox('Click!'); }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-25
    • 1970-01-01
    • 2016-03-03
    • 1970-01-01
    • 2013-04-28
    • 2021-08-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多