FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
Indice incorrecto
Hola,
haber si alguien me puede explicar porque este codigo, despues de correr, me indica "indice incorrecto". Este el el codigo: Código:
var Cadena : String; J, I : Integer; begin OpenDialog1.Title := 'Borrar dia ...'; If OpenDialog1.Execute Then begin I := Pos(',',OpenDialog1.FileName) - 3; Cadena := Copy(OpenDialog1.FileName,I,20); Label2.Caption := Cadena; If MessageDlg('Estas a punto de borrar un dia, ¡estas seguro!',mtConfirmation, [mbYes,mbNo],0) = IdYes Then For J := 0 To TreeView1.Items.Count - 1 Do If (Cadena = TreeView1.Items[J].Text) Then Begin DeleteFile(OpenDialog1.FileName); TreeView1.Items[J].Selected := True; TreeView1.Selected.Delete; MessageDlg('El archivo ha sido borrado con exito',mtInformation,[mbOk],0) End; end; end; Alguien me puede explicar porque, porque no lo entiendo, gracias de antemano Última edición por VolaRe fecha: 22-02-2004 a las 12:23:33. |
#2
|
|||
|
|||
Y por qué en lugar de
Código:
TreeView1.Items[J].Selected := True; TreeView1.Selected.Delete; Código:
TreeView1.Items[J].Delete; PD: te aconsejo el uso de la etiqueta CODE para poner código |
#3
|
||||
|
||||
Aun me sale el error
Pues tambien tienes razon, para que poner dos lineas de codigo si con una me hace lo mismo. Pero me sigue saliendo el mismo error "Indice invalido".
Código:
If Cadena = TreeView1.Items[J].Text Then Última edición por VolaRe fecha: 22-02-2004 a las 12:24:27. |
#4
|
|||
|
|||
Bueno, el error te lo marca por culpa del bucle for. Es decir, tu incrementas el contador J hasta TreeView1.Items.Count - 1, que en un bucle for (si no voy equivocado) lo tomará como una constante (5, 6, 7, los que sean). Al hacer un delete durante la iteración del mismo, llega un momento en que te pasarás de rango.
Cambia el bucle for por uno while (en el que, por cada iteración, se evaluará la expresión) y nos comentas. PD: bien por la etiqueta CODE!!! |
#5
|
||||
|
||||
bucle while
cadetill, pues si te digo la verdad no tengo ni idea de como ponerlo en un bucle while, porque qeu le pongo:
Código:
while cadena = TreeView1.Items.Item[J].Text Do Código:
while Cadena <> TreeView1.Items.Item[J].Text Do Asi que nano, no tengo ni puta idea de como resolver este problemilla, si me hechases una mano te lo agradeceria un monton, y eso sin contar lo que habre aprendido con esa manilla que me has hechao, sea lo que sea muchas gracias por tu interes |
#6
|
|||
|
|||
Prueba a realizar el bucle en sentido inverso, es decir, empenzado por el último elemento.
|
#7
|
|||
|
|||
Bueno, puedes probar tambien lo que comenta jplj, es decir
Código:
for j := TreeView1.Items.Count - 1 downto 0 to Código:
J := 0; while J <= TreeView1.Items.Count - 1 do begin if (Cadena = TreeView1.Items[J].Text) Then begin DeleteFile(OpenDialog1.FileName); TreeView1.Items[J].Delete; MessageDlg('El archivo ha sido borrado con exito',mtInformation,[mbOk],0); end else inc(J); end; |
#8
|
||||
|
||||
agradecimiento
Muchas gracias a los dos.
Como habreis comprovado soy un pardillo en esto, asi que no sabeis los quebraderos de cabeza que tenia ya con esto, gracias nuevamente |
#9
|
||||
|
||||
gracias
Cita:
gracias jplj por tu consejo, va a la perfeccion |
|
|
|