1

アクティブ化イベントで要素(ラベル)を入力するダイアログボックスがあります。ウィンドウが非アクティブ化されているときに、これらの要素 (ラベル) を削除したいと考えています。次のようなもの:[メインコードの誤った断片ですが、説明的です]

my $wchRW = Win32::GUI::DialogBox->new(
-name   =>  "wchR",
-title  =>  "whed",
-left   =>  CW_USEDEFAULT,
-size   =>  [300, 130],
-parent =>  $mw,
);

$wchRW->AddGroupbox(
-name   =>  "wchR_gb",
-text   =>  "being watched",
-width  =>  $wchRW->ScaleWidth() - $padding,
-height =>  100,
-left   =>  $padding/2,
);

sub wchR_Activate {
my $wchtxt = "sample";
# lbleft, lbtop are calculated here
$wchRW->AddLabel(
            -name   =>  "wchR_lb0",
            -text   =>  $wchTxt,
            -left   =>  $lbLeft,
            -top    =>  $lbTop,
        );
}
sub gitni_wchR_Deactivate {
print "Here\n";
Win32::GUI::DestroyWindow($wchRW->wchR_lb0); #this is line n
}
#i have a button in main window $mw. 
#onclick of this button this dialogbox is shown.
#sub b1_Click { $wchRW->DoModal(); return 0; }

しかし、問題は、非アクティブ化の「Here」が何度も呼び出され、その後例外がスローされることです [@INC .... 行 n で auto/wchR_.al が見つかりません]。メイン ウィンドウをフリーズし、唯一のオプションは、タスク マネージャーを使用してプロセスを終了することです。

私を助けてください。「ここ」が何度も印刷されるのはなぜですか?要素を完全に削除するには? ありがとう

4

1 に答える 1

0

sub wchR_Deactivateダイアログがフォーカスを失うたびに発生するため、何度も呼び出されます。

AddLabel通常、_Activeate() イベント ハンドラでは実行しないでください。すべてのものは先に作成する必要があります。コントロールの表示状態を操作したり、メッセージを変更しWin32::GUI::Hideたりできます。Win32::GUI::Show$wchRW->wchR_lb0->Text($new_message)

于 2011-04-12T06:17:34.490 に答える