我正在尝试将事件处理程序添加到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!'); }
由于
答案 0 :(得分: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!'); }