perl win32 :: gui удаляет элементы - PullRequest
1 голос
/ 05 октября 2010

У меня есть диалоговое окно, в которое я заполняю элементы (метки) при активации события. Я хочу удалить эти элементы (метки), когда окно деактивируется. что-то вроде: [его ошибочный фрагмент основного кода, но пояснительный]

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; }

Но проблема в том, что «Здесь» при деактивации вызывается много раз, и после этого возникает исключение [невозможно найти auto / wchR_.al в @INC .... строка n]. Замораживание главного окна и единственный вариант - завершить процесс через диспетчер задач.

Пожалуйста, помогите мне. Почему «здесь» печатается много раз? Как удалить элемент навсегда? Спасибо

1 Ответ

0 голосов
/ 12 апреля 2011

sub wchR_Deactivate будет вызываться много раз, потому что это происходит каждый раз, когда диалог теряет фокус.

Обычно вы не должны делать AddLabel в обработчике событий _Activeate ().Все должно быть создано впереди.Вы можете сделать Win32::GUI::Hide или Win32::GUI::Show для управления состоянием дисплея управления и использовать $wchRW->wchR_lb0->Text($new_message) для изменения сообщения.

...