El problema es que los bucles while() pueden entrar en bucle infinito: vas incrementando de línea en línea, pero la condición de salida es mientras $text sea una cadena vacía, lo cual creo que es cierto para todas las líneas que están más allá de las líneas existentes de la rejilla.
Deberías poner un control más, algo así:
while ($text eq "" and $row <= $GridC->GetRows()) {
siendo $GridC->GetRows() el número de líneas actuales de la rejilla.
Y el detalle: el código para activar y desactivar los controles, siempre es el mismo. Solo cambia el valor a poner en las celdas.
Quedaría algo así:
Using perl Syntax Highlighting
- sub Grid_Click {
- my ( $row, $col ) = @_;
- my $estado = $GridC->GetCellCheck( $row, $col );
- if ($col == 0) { # si el clic es en la primera columna...
- $col = 1; # pasamos a la siguiente celda
- $row++;
- my $max_row = $GridC->GetRows(); # tamaño de la rejilla
- do { # hacemos...
- $GridC->SetCellCheck( $row, $col, $estado ); # todos los controles iguales
- $row++; # en todas las filas
- } while ( # mientras
- $row < $max_row # estemos dentro de la rejilla,
- and $GridC->GetCellText($row, $col) eq "" # y no haya texto
- );
- }
- }
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4