0

複数の単純なウィンドウを作成するスクリプトを作成しようとしています(WxApp から継承します)。ウィンドウには、クリック EVENT のボタンとハンドラが 1 つだけ含まれています。

複数のウィンドウが存在する場合、クリックイベントの処理に問題があります。ウィンドウのインスタンスが 1 つだけ存在する場合、イベントは正しく検出されます。イベントは、最後に作成されたウィンドウで常に正しく機能するようです。どこに問題があるのか​​ わかりません...このサンプルでは、​​最初に作成されたウィンドウでボタンをクリックした後、2番目のウィンドウでイベントがキャッチされているようです。「1」ではなく「2」をコンソールに出力します。

package MyApp;
use base 'Wx::App';

use strict;
use warnings;
use Wx;
use aliased 'Widgets::Forms::MyWxFrame';

sub new {

    my $self = shift;
    $self = {};
    $self = Wx::App->new( \&OnInit );
    bless($self);

    $self->{"windowNumber"} = shift;

    my $mainFrm = MyWxFrame->new(
        undef,                     
        -1,                        
        "My app - ".$self->{"windowNumber"},
        &Wx::wxDefaultPosition
    );

    my $button = Wx::Button->new( $mainFrm, -1, "Test btn", );
    Wx::Event::EVT_BUTTON( $button, -1, sub { __OnClick( $self, @_ ) } );

    $mainFrm->Show(1);
    return $self;
}

sub OnInit {
    return 1;
}

sub __OnClick {
    my $self  = shift;
    my $btn   = shift;
    my $event = shift;

    print $self->{"windowNumber"};
}

my $myApp = MyApp->new(1);
my $myApp2 = MyApp->new(2);


$myApp->MainLoop;
4

1 に答える 1