ListBox en Boucle

Bonjour,
Un souci avec ListBox que je dois utiliser en remplacement d’un affichage sur TextArea en MultiLine.


For j = 0 to n
TAGc.Text =  TAGc.Text + Format(j, "00") + " "+  Lat_i + " "+ Lng_i + " "+ Format(tc(j) , "000.0") + "°"+ " " +  Format(dist(j) , "0.0") + EndOfLine
Next

l’affichage du nombre de ligne est fonction de la boucle, le nombre de colonnes est constant : 5.
merci, d’avance.

Pardon, mais outre le fait que ce code est plein de variables dont l’origine et la valeur sont inconnues, quel est la nature du souci en question ?

Que se passe-t-il exactement ?

Essayez de rsumer le problme avec un chantillon de code (snippet) qui mette en vidence le problme, plutt que de poster simplement une boucle sans rfrence. Cela sera plus facile comprendre et exprimenter.

Je poste la partie la plus significative du code, vous verrez mieux comme a je suppose :

//Variables d'entre
  Lat1 = CDbl(txtLatD.text)  //Coordonnes de depat et d'arrive
  Lng1 =CDbl(txtLngD.text)
  Lat2 =CDbl(txtLatA.text)
  Lng2 =CDbl(txtLngA.text)

  Gk = CboGc.Text     // Espacement en longitude des points intermediaires
 
//*******************************************************************************************************************************
  
  CL= EndOfLine
  //TAGc.Text = ""
      
 //Leve de l'ambiguit du franchissement du meridien 180
    
    d_Lng = Trigo.Mod_Lng(Lng2 - Lng1)
    s = Sign(x)
    
    If d_Lng < 0 Then
      s = -1
    Else
      s =  1
    End If
    
    If D_Lng = 0 Then
      If Sin(lat1 * Trigo.Rad) > Sin(lat2 * Trigo.Rad) Then
        tc0 = Trigo.Pi
        
      ElseIf Sin(lat1 * Trigo.Rad) < Sin(lat2 *Trigo.Rad) Then
        tc0 = Trigo.tpi
      End If
      
    end if
    
        
 //*****************************************************************************************************************************************
 //Rinitialisation des variables Lat et L
    lat(0) = Lat1 * Trigo.Rad
    L(0) = Lng1
    lat(Abs(d_Lng) / Gk) = Lat2 * Trigo.Rad
    L(Abs(d_Lng) / Gk) = Lng2
    
 //******************************************************************************************************************************************
 //Boucle servant au calcul des coordonnes L(j),Lat(j), et caps tc(j).
    
    For i = 0 To Abs(d_Lng) Step Gk
        j = i / Gk
      
      L(j) = Trigo.Mod_Lng(Lng1 + s * i)
      
     //Calcul de la latitude en fonction de l'increment en longitude Gk.
      lat(j) = Atan((Sin(Lat1 * Trigo.Rad) * Cos(Lat2 * Trigo.Rad) * Sin((L(j) - Lng2) * Trigo.Rad) _
      - Sin(Lat2 * Trigo.Rad) * Cos(Lat1 * Trigo.Rad) * Sin((L(j) - Lng1) * Trigo.Rad)) / (Cos(Lat1 * Trigo.Rad) * Cos(Lat2 * Trigo.Rad) * Sin((Lng1 - Lng2) * Trigo.Rad)))
      
     //Calcul du cap initial de chaque point intermediaire.
      tc(j) = Trigo.Modulo(Atan2((Sin((L(j) - Lng2) * Trigo.Rad)) * Cos(Lat2 * Trigo.Rad), _
      Cos(lat(j)) * Sin(Lat2 * Trigo.Rad) - Sin(lat(j)) * Cos(Lat2 * Trigo.Rad) * Cos((L(j) - Lng2) * Trigo.Rad)),Trigo.tpi)
      
    Next i
    
 //*******************************************************************************************************************************************
 //Boucle servant au calcul des distances entre points intermdiaires.
 //Nouvelle Reinitilisation des variables tableau du point d'arrive Lat(j+1) et L(j+1).
    
    lat(j + 1) = Lat2 * Trigo.Rad
      L(j + 1) = Lng2
    
    For i = 0 To Abs(d_Lng) Step Gk
      
        j = i / Gk
        dist(j) = 2 * ASin(Sqrt((Sin(((lat(j)) - (lat(j + 1))) / 2)) ^ 2 + Cos(lat(j)) * Cos(lat(j + 1)) * (Sin(((L(j) - L(j + 1)) * Trigo.Rad) / 2)) ^ 2))
      
    Next i
    
 //********************************************************************************************************************************************
 //Boucle servant a l'affichage
   
     If L(j) - L(j + 1) = 0 Then
      
      For i = 0 To Abs(d_Lng) - 1 Step Gk
        j = (i / Gk)
        
        Call GeoNav.LatDMM(lat(j) * Trigo.deg, Lat_i)
        Call GeoNav.LngDMM(L(j), Lng_i)
        
       //Affichage des coordonnes, caps initiaux et distances entre les points intermediaires.
        TAGc.Text =  Format(j, "00") + " "+  Lat_i + " "+ Lng_i + "  "+ Format(tc(j) * Trigo.deg, "000.0") + ""+ " " +  Format(dist(j) * Trigo.Rad2Nm, "0.0") '+ CL
        
      Next i
      
    //Affichage des coordonnes d'arrive
      
      Call GeoNav.LatDMM(Lat2, Lat_i)
      Call GeoNav.LngDMM(Lng2, Lng_i)
      
      TAGc.Text = TAGc.Text + Format((j + 1), "00")+ " "+ Lat_i+ " "+ Lng_i
         
    Else
      
//*************************************************************************************************************   ************************
      For i = 0 To Abs(d_Lng) - 1 Step Gk
        
        j = (i / Gk)
        
        Call GeoNav.LatDMM(lat(j) * Trigo.deg, Lat_i)
        Call GeoNav.LngDMM(L(j), Lng_i)
        
      //Affichage des coordonnes, caps initiaux et distances entre les points intermediaires.
        TAGc.Text = TAGc.Text + format(j, "00") + "  "+ Lat_i+ " "+ Lng_i + " " + Format(tc(j) * Trigo.deg, "000.0")+ "" + " " + Format(dist(j) * Trigo.Rad2Nm, "0.0") + CL
        
      Next i
       
    //Affichage des coordonnes d'arrive
      Call Geonav.LatDMM(Lat2, Lat_i)
      Call GeoNav.LngDMM(Lng2, Lng_i)
      
      TAGc.Text = TAGc.Text + Format((j + 1), "00")+ " "+ Lat_i+ " " + Lng_i
      

[quote=95898:@Djamel AIT AMRANE]Je poste la partie la plus significative du code, vous verrez mieux comme ça je suppose :

[/quote]

Djamel … Pouvez-vous s’il vous plaît préciser la nature du problème que vous rencontrez ?

Votre code est plein de variables sans leur déclaration, et Geonav.LatDMM() fait quoi ? Il est impossible de débuguer quoi que ce soit sans savoir quel est le problème, avec un code non testable.

Vous mentionnez un problème de ListBox recevant du texte, sans doute ligne à ligne, en remplacement d’un TextArea. Pourquoi utiliser une ListBox au lieu d’une TextArea ? Que se passe-t-il ? Les lignes sont coupées ? Autre chose ? Copies d’écran peut-être ?

Que voulez-vous obtenir ?

Djamel, je ne suis pas sure d’avoir bien compris le problem. De toute faon, s’il s’agit d’utiliser une listbox au lieu d’un textarea, on peut essayer avec le code suivant, aprs avoir ajout, sur la fentre, une listbox du nome listbox1: For j as integer = 0 to n listbox1.addrow Format(j, "00"), Lat_i, Lng_i, Format(tc(j) , "000.0") + "", Format(dist(j) , "0.0") Next

Ah, j’ai peut tre mal compris ce que vous vouliez savoir, j’ai isol la partie qui pose problme du projet global
pour que le problme soit plus lisible.
Dans ce cas, je dois envoyer le binaire de l’application.
je ne sais pas comment la poster sur le Forum, pourriez vous me le dire ?

Desole mais je ne peux pas corriger votre code ou le tester pour deviner le probleme. Essayez d’expliquer ce qui ne va pas. Comment la ListBox tourne-t-elle en boucle ?

Pour commencer, peut-être qu’une capture d’écran du TextArea en situation et de ce que tu souhaites obtenir avec la ListBox serait plus explicite.

Il y a déja un probléme avec cette boucle. A chaque passage c’est le contenu complet du TextArea qui est changé. Et donc à la fin de la boucle, il ne doit rester que la dernière ligne. Dans ce cas, j’utiliserai plutôt TextArea.AppendText:

For j = 0 to n TAGc.AppendText TAGc.Text + Format(j, "00") + " "+ Lat_i + " "+ Lng_i + " "+ Format(tc(j) , "000.0") + "°"+ " " + Format(dist(j) , "0.0") + EndOfLine Next

Autant pour moi. Je n’avais pas les yeux en face des trous quand j’ai lu ton code et encore moins quand je l’ai réécrit. Mais l’emploi d’AppendText me paraît quand même judicieux mais plutôt comme ça:

TAGc.AppendText Format(j, "00") + " "+  Lat_i + " "+ Lng_i + " "+ Format(tc(j) , "000.0") + "°"+ " " +  Format(dist(j) , "0.0") + EndOfLine

C’est plus explicite à la relecture et j’ose imaginer que cela évite la création temporaire d’une string qui est inévitable de par la nature ‘NonMutable’ du type String.

Je pense qu’il y a un malentendu, j’ ai dit que je ne savais pas comment poster l’application pour que vous puissiez accder et tester au code.

Si vous n’expliquez pas le problème, vous êtes le seul à savoir ce que le code doit faire. Le poster n’avancera guère. Vous observerez que tous ceux qui veulent vous aider indiquant que votre question n’est pas claire. S’il vous plaît, expliquez ce qui ne va pas. Pourquoi semblez-vous ne pas vouloir clarifier le “souci” ? Aidez nous à vous aider…

Pour poster un fichier, placez le sur un site ou un dropbox et postez le lien avec l’option “Link”, l’icône du globe avec une flèche verte vers la droite. Mais s’il vous plaît, dites nous ce que le programme est censé faire.

Ce code fonctionne bien avec TAGc.Text.
Ci joint capture ecran:
[/url][/img]

???

Apparemment l’affichage de l’image pose probleme.
le lien suivant contient normalement le fichier GC_Track:
link text

[quote]Ce code fonctionne bien avec TAGc.Text.
Ci joint capture ecran:
[/quote]

[img][url=http://postimg.org/image/z98g2w243/][img]

J’avais oubli de vous expliquer, ce code sert au calcul de l’orthodromie, en navigation c’est le chemin le plus court entre deux points.
L’orthodromie est un arc de grand cercle sur la sphre, sur la carte marine qui est une projection de Mercator, l’orthodromie devient
une courbe proche d’une sinusode.
Pour pouvoir suivre une trajectoire de ce genre il faut la dcouper en segments de droites assez petits; parcours linaires, c’est les lments de ces parcours rectilignes qui sont calculs puis affichs: n du parcours, les coordonnes des points intermdiaires c’est a dire les extrmits des segments de droites, en latitude/longitude, les caps a suivre, les distances partielles.
il y a donc 5 lments d’o, 5 colonnes et autant de lignes qu’il y a de parcours.

Pour que vous ayez une ide plus prcise, j’ai post cette image sous Vb6.

Trs succintement, si ta ListBox s’appelle ListBox1 a pourrait donner ceci:

[code]For j = 0 to n

// Cre une nouvelle range et affecte la chane de caractres en argument la premire colonne
ListBox1.AddRow Format( j, “00” )

// Rcupre l’index de cette nouvelle range
Dim theRow As Integer = ListBox1.LastIndex

// Remplit les autres colonnes de la nouvelle range
ListBox1.Cell( theRow, 1 ) = Lat_i
ListBox1.Cell( theRow, 2 ) = Lng_i
ListBox1.Cell( theRow, 3 ) = Format( tc( j ), “000.0” ) + “”
ListBox1.Cell( theRow, 4 ) = Format( dist( j ), “0.0” )

Next[/code]

Je n’ai pas eu le temps de tester ce code, mais l’ide gnrale est l. Tu trouveras plus d’infos sur la ListBox ici.

Merci Eric, c’etait ce qu’il fallait, ci joint l’apparence de la listBox:

[/url]
[/img]

[quote]Bonjour,
Un souci avec ListBox que je dois utiliser en remplacement d’un affichage sur TextArea en MultiLine.[/quote]
Merci a tous ceux qui ont intervenu ou contribuer a la solution.