...Thanks only 80 more lines of code to right...
Arrgh. A classic example of why you should avoid cut and paste programming. It shouldn't be too hard to refactor all of those button calls out into one call with passed parameters. You would probably need to use a closure to get the right return values. Umm... Something like this:
(I'm working in Linux and can't use Win32::GUI stuff, so I did it with Tk, but it should give you a good hint.)
use warnings;
use strict;
use Tk;
my $font = "{Times New Roman} 32";
my @chosen;
my $grid_width = 10;
my $mw = MainWindow->new( -title => 'Keno', );
my $header_frame = $mw->Frame(
-relief => 'raised',
-border => 3
)->grid(
-row => 0,
-column => 0,
-columnspan => $grid_width,
-sticky => 'ew'
);
$header_frame->Label(
-text => 'Welcome to Keno',
-font => "{Comic Sans MS} 24 bold",
)->pack;
my ( $row, $column );
for ( 0 .. 79 ) {
$column = $_ % $grid_width;
$row++ unless $column;
$mw->Button(
-width => 2,
-font => $font,
-text => $_ + 1,
-command => [ sub { Button_Click( $_[0] ) }, $_ + 1 ]
)->grid(
-row => $row,
-column => $column,
);
}
MainLoop;
sub Button_Click {
my $arg = shift;
if ( defined $chosen[9] ) {
print 'You already chose 10 numbers: ';
print join ', ', @chosen;
print "\n";
}
else {
print "$arg was choosen\n";
push( @chosen, $arg );
}
}
|