2010-10-05 4 views
1

J'ai une boîte de dialogue, à laquelle je place des éléments (étiquettes) sur l'événement activate. Je souhaite supprimer ces éléments (étiquettes) lorsque la fenêtre est désactivée. quelque chose comme: [son fragment de code erronée mais explicative]perl win32 :: gui supprimer des éléments

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

Mais le problème est, « Ici » en est appelé Deactivate plusieurs fois et une exception est levée par la suite [ne peut pas localiser auto/wchR_.al dans @INC .... ligne n]. Gel de la fenêtre principale et seule option est de terminer le processus via le gestionnaire de tâches.

S'il vous plaît aidez-moi. Pourquoi "ici" est imprimé plusieurs fois? Comment supprimer un élément de manière permanente? Merci

Répondre

0

Le sub wchR_Deactivate sera invoqué plusieurs fois car il arrive à chaque fois que le dialogue a perdu le focus.

Normalement, vous ne devriez pas faire AddLabel dans le gestionnaire d'événements _Activeate(). Tout devrait être créé à l'avance. Vous pouvez faire Win32::GUI::Hide ou Win32::GUI::Show pour manipuler l'état de l'affichage du contrôle et utiliser $wchRW->wchR_lb0->Text($new_message) pour changer le message.

Questions connexes