Grandamakulo   25-08-2021, 22:48
#1
Hola, compañeros:
Pues lo del asunto, gente. Veréis, tenía un código que, más o menos, funcionaba. Lo del más o menos es porque no tenía control de errores, pero funcionaba. Y el caso es que, de la noche a la mañana, ha dejado de hacerlo.
Se trata de un TreeView llamado «trvProyecto» que tiene unos botones añadidos para mover los ítems y resulta que que el invento funcionaba hasta hace poco —no puedo determinar cuándo, porque mis proyectos tienden a la eternización—, cuando comenzó a ocurrir que no podía cambiar el «Current» del TreeView con MoveTo(). Simplemente es que MoveTo() no hace nada de nada —y he probado luego con MoveChild, MoveParent, MoveBefore, MoveFirstet caetera, con el mismo resultado—. No sé si os ha pasado lo mismo y estáis tan desesperados como yo. Pongo ejemplo del código:

Código:
Public Sub pryArriba_Click()

  Dim sClave As String
  Dim sEste As String
  
  sEste = trvProyecto.Current.Key
  trvProyecto.MoveCurrent
  If Not trvProyecto.MoveAbove() Then
    sClave = trvProyecto.Item.Key
    Try trvProyecto.Current.MoveBefore(sClave)
    trvProyecto.MoveTo(sEste)
  Endif

End

Public Sub pryAbajo_Click()

  Dim sClave As String
  Dim sEste As String
  
  sEste = trvProyecto.Current.Key
  trvProyecto.MoveCurrent
  If Not trvProyecto.MoveBelow() Then
    sClave = trvProyecto.Item.Key
    trvProyecto.Current.MoveAfter(sClave)
    trvProyecto.MoveTo(sEste)
    trvProyecto.Item.Selected = Si
  Endif

End

Public Sub pryPosterior_Click()

  Dim sClave As String
  Dim sEste As String
  
  sEste = trvProyecto.Current.Key
  trvProyecto.MoveCurrent
  If Not trvProyecto.MoveAbove() Then
    sClave = trvProyecto.Item.Key
    trvProyecto.Current.Reparent(sClave)
    trvProyecto.MoveTo(sEste)
    trvProyecto.Item.Selected = Si
  Endif

End

Public Sub pryAnterior_Click()

  Dim sClave As String
  Dim sEste As String
  
  sEste = trvProyecto.Current.Key
  trvProyecto.MoveCurrent
  If Not trvProyecto.MoveParent() Then
    If Not trvProyecto.MoveParent() Then
      sClave = trvProyecto.Item.Key
      trvProyecto.Current.Reparent(sClave)
      trvProyecto.MoveTo(sEste)
      trvProyecto.Item.Selected = Si
    Endif
  Endif

End

Public Sub prySuperior_Click()

  Dim sClave As String
  
  Debug trvProyecto.Current.Text 
  sClave = trvProyecto.Current.Key
  trvProyecto.Current.MoveFirst
  trvProyecto.MoveTo(sClave)
  Debug trvProyecto.Current.Text 

End

Public Sub pryInferior_Click()

  Dim sClave As String
  
  Debug trvProyecto.Current.Text 
  sClave = trvProyecto.Current.Key
  trvProyecto.Current.MoveLast
  trvProyecto.MoveTo(sClave)
  Debug trvProyecto.Current.Text 

End

¿Seríais tan amables de orientarme? —seguro que es una chorrada que mi ignorancia ha pasado por alto—. Gracias de antemano.
Última modificación: 31-08-2021, 11:41 por Grandamakulo.
tincho   25-08-2021, 23:54
#2
(25-08-2021, 22:48)Grandamakulo escribió: Y el caso es que, de la noche a la mañana, ha dejado de hacerlo.
  • En el instante que llamare A, hace un tiempo, funcionaba.
  • En el instante B, ahora, NO funciona
¿Es en ambos instantes usas la misma versión del IDE? si la respuesta es sí, entonces hay algo raro, si por el contrario estas manejando dos versiones diferentes, que debe ser lo mas probable, debe tratarse de uno de los 1000 cambios que tiene dicha versión respecto a la anterior.
Dicho esto Intente usar el código que pusiste para ver el efecto que comentas (yo tengo el IDE 3.15) pero no funciono, se ve que es algo que sacaste de un proyecto mas grande y hay unas variables llamadas "Si" que no encuentra así que remplace ese texto por "True" que es lo que espera el "trvProyecto.Item.Selected"
Tal vez si haces un ejemplo con datos en el treeview sea mas facil que encontremos una solucion.
Por otra parte que es lo que queres hacer exactamente? Mover el cursor por los elementos? o mover los elementos (items) de posición relativa respecto a otros items?


Saludos.

1 Saludo.
Grandamakulo   26-08-2021, 20:14
#3
Hola, @tincho:
  1. Sí, llevas razón, hubo cambio de IDE por medio, pero no recuerdo con cuál funcionaba.
  2. Exactamente. En casi todos los módulos me hago constantes «Si» y «No» como TRUE y FALSE. Se me olvidó comentároslo.
  3. También es cierto que es parte de un programa más grande. Voy a montar un ejemplo pequeñito porque hoy me he dado cuenta de que llega incluso a «borrar» variables que no tienen que ver con el control.
  4. Pretendo mover los ítems y, según me convenga, mantener el cursor interno en el propio ítem o no.
Ya digo, en breve cargo un pequeño ejemplo para verlo. Muchas gracias.

En un lugar de La Mancha de cuyo nombre me acuerdo perfectamente...
Grandamakulo   27-08-2021, 12:00
#4
Bueno, ejemplo montado. En el TextArea txtNotas se van mostrando los cambios que NO deberían producirse:

.zip
FalloTreeView.zip (Tamaño: 19.07 KB Descargas: 2)


A ver si vosotros sois capaces de entenderlo, porque yo, desde luego, ni idea.

En un lugar de La Mancha de cuyo nombre me acuerdo perfectamente...
tincho   27-08-2021, 12:10
#5
(27-08-2021, 12:00)Grandamakulo escribió: Bueno, ejemplo montado. En el TextArea txtNotas se van mostrando los cambios que NO deberían producirse:

ok, le pego un vistazo y te digo algo
Saludos.

ok, creo que ya esta.
  • Agregue una linea para que se seleccione la clave anterior al movimiento
  • Puse el treeview en mode single (antes estaba en multiple)
Código:
Public Sub pryArriba_Click()
 
  Dim sClave As String
  Dim sEste As String
 
  txtNotas.Text &= trvProyecto.Current.Key & " >>> "
 
  sEste = trvProyecto.Current.Key
 
  trvProyecto.MoveCurrent
  If Not trvProyecto.MoveAbove() Then
    sClave = trvProyecto.Item.Key
    Try trvProyecto.Current.MoveBefore(sClave)
    trvProyecto.MoveTo(sEste)
  Endif
 
  trvProyecto[sEste].Selected = True
 
  txtNotas.Text &= trvProyecto.Current.Key & gb.Lf
 
End
Saludos.
Última modificación: 27-08-2021, 12:20 por tincho.

1 Saludo.
Grandamakulo   31-08-2021, 08:44
#6
¡Releñes, @tincho, se me pasó tu respuesta! Y yo esperando aquí sentado, jajaja.
Pues muchísimas gracias. Voy corriendo a probarlo, a ver si le pongo el [SOLUCIONADO]  Big Grin .

En un lugar de La Mancha de cuyo nombre me acuerdo perfectamente...
Shordi   31-08-2021, 09:57
#7
Pues a mí se me pasó este hilo... es lo que tiene mirar en el móvil. No te pones a responder pero luego te lo da como leído y no lo recuerdas...

Big Grin Big Grin Tongue

No podemos regresar
tincho   31-08-2021, 10:41
#8
(31-08-2021, 09:57)Shordi escribió: Pues a mí se me pasó este hilo... es lo que tiene mirar en el móvil. No te pones a responder pero luego te lo da como leído y no lo recuerdas...

Es mas practico usar "Temas recientes" que muestra eso, lo reciente, porque el de "Temas nuevos" se no muestra lo que ya viste.
Saludos.

(31-08-2021, 08:44)Grandamakulo escribió: ¡Releñes, @tincho, se me pasó tu respuesta! Y yo esperando aquí sentado, jajaja.
Pues muchísimas gracias. Voy corriendo a probarlo, a ver si le pongo el [SOLUCIONADO]  Big Grin .

De nada manchoso, es que venia con buen impulso pues me bebí un vino de por ahí de tus lares. Big Grin
[Imagen: BZ2Iydt.jpg]
Saludos.
Última modificación: 31-08-2021, 10:51 por tincho.

1 Saludo.
Shordi   31-08-2021, 11:07
#9
Sí señor. Por aquí vino queso aceitaco y harinaca. Así nos criamos Big Grin Big Grin Big Grin Rolleyes

No podemos regresar
Grandamakulo   07-09-2021, 12:59
#10
(31-08-2021, 11:07)Shordi escribió: Sí señor. Por aquí vino queso aceitaco y harinaca. Así nos criamos Big Grin Big Grin Big Grin Rolleyes

Y torreznacos, no nos olvidemos del colesterol  Big Grin

En un lugar de La Mancha de cuyo nombre me acuerdo perfectamente...
  
Usuarios navegando en este tema: 1 invitado(s)
Powered By MyBB, © 2002-2024 MyBB Group.
Made with by Curves UI.