http://www.perlmonks.org?node_id=969316

ruhroh has asked for the wisdom of the Perl Monks concerning the following question:

Hi perl monks, I am having an issue with retrieving values from a dynamically generated group of combo boxes. I am using an array to hold all of these combo boxes. I can only seem to access the most recent combo box and I get an error whenever I try to access the contents of an older combo box (so if I have two combo boxes, I get an error when I try to access the first one).

Here is the error that I get: Tk::Error: bad listbox index "": must be active, anchor, end, @x,y, or a number at /usr/intel/pkgs/perl/5.8.5/lib/site_perl/5.8.5/x86_64-linux/Tk.pm line 247. Tk callback for .browseentry.toplevel.frame.listbox Tk callback for .button1 Tk::__ANON__ at /usr/intel/pkgs/perl/5.8.5/lib/site_perl/5.8.5/x86_64-linux/Tk.pm line 247 Tk::Button::butUp at /usr/intel/pkgs/perl/5.8.5/lib/site_perl/5.8.5/x86_64-linux/Tk/Button.pm line 111 <ButtonRelease-1> (command bound to event)

Here is my code:

use strict; use warnings; use Tk; my $fieldcounter = 0; my $textboxrow = 1; my $fieldbuttonrow = 2; my @be; my @listb; my $mw = tkinit; $mw -> geometry("400x200"); $be[$fieldcounter] = $mw->BrowseEntry(-label=>"Field") ; $listb[$fieldcounter] = $be[$fieldcounter]->Subwidget('slistbox')->Sub +widget('scrolled'); my @content; tie @content,'Tk::Listbox', $listb[$fieldcounter]; @content = qw/dog cat mouse/; my $button = $mw->Button(-text => 'Add Field',-command => \&addtextbox +,); my $button2 = $mw->Button(-text => 'Print texts',-command => \&printte +xts,); $be[$fieldcounter] -> grid(-row=>$textboxrow,-column=>2); $button ->grid(-row=>$fieldbuttonrow,-column=>2,-columnspan=>2); $button2 ->grid(-row=>$fieldbuttonrow+1,-column=>2,-columnspan=>2); MainLoop(); sub addtextbox{ $fieldcounter++; $fieldbuttonrow++; $textboxrow++; $be[$fieldcounter] = $mw->BrowseEntry(-label=>"Field"); $listb[$fieldcounter] = $be[$fieldcounter]->Subwidget('slistbox')->Sub +widget('scrolled'); tie @content,'Tk::Listbox', $listb[$fieldcounter]; @content = qw/dog cat mouse/; $be[$fieldcounter] -> grid(-row=>$textboxrow,-column=>2); $button->grid(-row=>$fieldbuttonrow,-column=>2,-columnspan=>2); $button2->grid(-row=>$fieldbuttonrow+1,-column=>2,-columnspan=>1); } sub printtexts{ my $field_id; my $field; my $fields; my @fieldslist; for my $listb_index(0 .. $fieldcounter){ print "listb_index is $listb_index\n"; $field_id = $listb[$listb_index] -> curselection(); $field = $listb[$listb_index] -> get($field_id); push @fieldslist, $field; } $fields = join (':', @fieldslist); print "fields is: $fields\n"; }