2010-06-23 2 views
1

나는 WX :: StaticBoxSizer의 서브 클래스에 이벤트 처리기를 추가하기 위해 노력하고있어,하지만 난 다음 오류 받고 있어요 :wx :: StaticBoxSizer의 하위 클래스에서 이벤트를 처리 할 수 ​​있습니까?

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

합니까 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

. GUI 플랫폼으로서'Wx'를 어떻게 묶어 놓았습니까? –

+0

이 게시물은 교차 게시되었으며 Perlmonks : http://www.perlmonks.org/?node_id=846110에 응답되었습니다. – daotoad

답변

1

는 내 질문은 http://perlmonks.org에 대답했다.

크기 조절기는 맞춤 컨트롤로 하위 분류에 실제로 적합하지 않습니다. 대신, 저는 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!'); }