2010-06-23 15 views
1

我想要一个事件处理程序添加到蜡质:: StaticBoxSizer的一个子类,但我发现了以下错误:wx :: StaticBoxSizer的子类可以处理事件吗?

Can't locate object method "Connect" via package "Wx::StaticBoxSizer" at C:/strawberry/perl/site/lib/Wx/Event.pm line 38.

是否意味着蜡质:: 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

发布更多的代码的可能给人为您提供的解决方案的一个更好的机会。 “Wx”作为一个GUI平台有多重要? – 2010-06-23 20:05:09

+0

这篇文章被交叉发布并在Perlmonks上回答:http://www.perlmonks.org/?node_id=846110 – daotoad 2010-06-23 21:26:09

回答

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!'); } 
相关问题