PDA

Ver la Versión Completa : ¿Cómo cerrar un Grid desde el OnKeyDown?


pfsoft
11-09-2007, 09:31:25
Wuenas.

Pues eso, que si alguna alma caritativa sabe como cerrar (remover, borrar, ...) un Grid por código desde el evento OnKeyDown del mismo.

Gracias anticipadas.

Pedro J.Fdez.

gluglu
11-09-2007, 09:56:09
No entiendo muy bien lo que quieres decir con 'cerrar', 'remover' o 'borrar' el DBGrid ?

Cerrar, se cierra el DataSet asociado al mismo, con lo que el DBGrid deja de mostrar dato alguno.

Remover no lo remueves hasta que cierras el Form y se libera tanto el DBGrid como el Form (al menos eso sería lo lógico). Si lo que quieres hacer es crear y destruir un DBGrid en tiempo de ejecución, no le veo la utilidad concreta.

Borrar el DBGrid valdría la explicación con respecto a Remover.

Además podrías (dependiendo de lo que quieras hacer), 'ocultar ' el DBGrid con lo cual parecería que lo has 'Borrado' o 'Removido', poniendo su propiedad Visible a False. En cualquiero de estos casos también de aconsejaría deshabilitar el DataSet asociado (con un simple Close del DataSet).

Cualquiera de estas posibilidades, sin más las puedes hacer en cualquiera de los eventos propios del DBGrid, por ejemplo el evento OnKeyDown.

procedure TForm.DBGrid1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
Case Key of
VK_ESCAPE :
begin
////
DBGrid1.Visible := False;
////
DBGrid1.DataSource.DataSet.Close;
////
end;
end;
end;

Si no es esto lo que pedías, no entendí tu pregunta. :o

Saludos

pfsoft
11-09-2007, 10:33:27
Cojo un Grid de la paleta de componentes y lo suelto enel formulario, sin enlazar con DataSet alguno, sólo lo que he dicho. En el evento OnKeyDown del Grid pongo lo siguiente:

if (Key = VK_F4) and (ssCtrl is Shift) then
DBGrid1.Free;

Sale Error Access violation.....


?????

pfsoft
11-09-2007, 10:38:08
no es ssCtrl is Shift, lo correcto es ssCtrl in Shift. Pero no és por ésto por lo que falla. Es que me he equivocado al escribirlo en el foro.

BlueSteel
11-09-2007, 16:47:16
Hola

Podrias acrarar si es un StringGrid o un DBGrid..... existe una gran diferencia...

si es un StringGrid... lo que puedes hacer es lo sgtes

para borrar todo debes poner algo así


procedure TForm1.Limpia_Items;
Var
i : Integer;
Begin
For i := 0 To StringGrid1.RowCount -1 Do
StringGrid1.Rows[i].Clear;
StringGrid1.RowCount := 1;
End;


declaro un procedimiento para limpiar el StringGrid... y este proceso lo realiza independiente de cuantas filas tenga tu StringGrid

Espero que te sirva.. ahh.. y debes explicar mejor lo que quieres hacer.. así uno no anda adivinando...:p

me falto.. para limpiar en el evento onkeydown, solo debes poner el nombre del procedimiento anterior...


procedure TForm1.StringGrid1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
Limpia_Items;
end;


y con eso estaria listoko

gluglu
11-09-2007, 16:59:25
Entiendo que lo que utiliza pfsoft es un TDBGrid.

La verdad es que probé lo que dice y es cierto : dá error. Intentas poner un DBGrid en un form sin más, y después intentas hacer un Free del DBGrid en tiempo de ejecución (sin cerrar el propio form), y salta un error.

No sé el porqué, así que no pude dar mayores explicaciones.

Por otro lado, tal y como dije, lo que no sé es por qué hacer un Free del DBGrid en tiempo de ejecución. Pero en eso no me meto.

La solución que yo veo de momento (pero que no soluciona el problema planteado), es poner el Visible := False