Vb.Net Remplir une RichTextBox avec condition [Résolu]

Karin.code 183 Messages postés vendredi 2 septembre 2016Date d'inscription 16 janvier 2018 Dernière intervention - 11 sept. 2016 à 22:21 - Dernière réponse : Karin.code 183 Messages postés vendredi 2 septembre 2016Date d'inscription 16 janvier 2018 Dernière intervention
- 12 sept. 2016 à 15:23
Bonjour,
c'est la première fois que je poste un sujet ici et c'est surement pas la dernière fois ( J'ai trouvé beaucoup des sujets intéressant ici)
je demande votre aide pour un problème qui parait simple pour certain (même trop simple) , je précise juste que je suis débutante :
dans le code suivant :
 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim g() As Integer = {5, 8, 12, 13, 3, 4, 5, 19}
For i As Double = 0 To 30 Step 1
For a = 0 To 7 Step 1
If i <> g(a) Then
RichTextBox1.Text = RichTextBox1.Text & i & ","
End If
Next
Next
End sub

j'ai utilisé :
Dim g() As Integer = {5, 8, 12, 13, 3, 4, 19, 7}

au lieu de :
If  i = 5  Or i = 8  or i = 12 Or i = 13  Or i = 3  Or i = 4  Or i = 19  Or i = 7  then

car la liste ne contient pas que
{5, 8, 12, 13, 3, 4, 19, 7} 
elle est assez longue
Mais dans la RichTextBox sa s'affiche comme ça :
0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,5,5,5,5,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,8,8,8,8,8,8,8,9,9,9,9,9,9,9,9,10,10,10,10,10,10,10,10,11,11,11,11,11,11,11,11,12,12,12,12,12,12,12,14,14,14,14,14,14,14,14,15,15,15,15,15,15,15,15,16,16,16,16,16,16,16,16,17,17,17,17,17,17,17,17,18,18,18,18,18,18,18,18,20,20,20,20,20,20,20,20,21,21,21,21,21,21,21,21,22,22,22,22,22,22,22,22,23,23,23,23,23,23,23,23,24,24,24,24,24,24,24,24,25,25,25,25,25,25,25,25,26,26,26,26,26,26,26,26,27,27,27,27,27,27,27,27,28,28,28,28,28,28,28,28,29,29,29,29,29,29,29,29,30,30,30,30,30,30,30,30,
moi ce que je veux et que si la valeur de i existe dans g alors en passe a la valeur suivante, le résultat finale doit être comme ça :
0,1,2,6,9,10,11,14,15,16,17,18,20,21,22,23,24,25,26,27,28,29,30
je comprend pourquoi ça s'affiche comme ça, mais je n'ai pas une idée comment corriger cette erreur
aidez-moi s'il vous plaît et merci
Afficher la suite 

Votre réponse

9 réponses

Meilleure réponse
vb95 1684 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 18 octobre 2018 Dernière intervention - Modifié par vb95 le 12/09/2016 à 00:55
1
Merci
Bonjour
Cadeau pour une débutante
 
Private Sub Button1_Click_1(sender As Object, e As EventArgs) Handles Button1.Click

Dim Liste() As Integer = {5, 8, 12, 13, 3, 4, 5, 19}
Dim Resultat as String = String.empty
For i As Integer = 0 To 30
If Liste.Contains(i) = False Then
Resultat= Resultat & i.ToString & ","
End If
Next
Resultat = Resultat.Substring(0,Resultat.Length - 1)
RichTextBox1.Text = Resultat

End Sub


- donne un nom significatif à tes variables : g() de ton code est trop vague alors que Liste() l'est beaucoup moins
- on utilise la variable Resultat et non le controle RichTextBox pour les calculs . La RichtTextBox ne sert que pour l'affichage ( il en est de même pour les autres contrôles)
- String.Empty est pour une chaine de caractères vide
- Le type Double est inutile : tu travailles sur des entiers
- Si le pas (Step) de la boucle For est = à 1 inutile de le spécifier : c'est sa valeur par défaut
- Contains : si le Liste ne contient pas i , on ajoute i à la RichTextBox
- La ligne après le Next enlève la dernière virgule

un excellent cours pour une débutante : http://plasserre.developpez.com/cours/vb-net/


La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi. 

Merci vb95 1

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 101 internautes ce mois-ci

Karin.code 183 Messages postés vendredi 2 septembre 2016Date d'inscription 16 janvier 2018 Dernière intervention - 12 sept. 2016 à 01:02
Merci pour le cadeau
je vais prendre tes remarques en considération
merci encore vb95
Commenter la réponse de vb95
NHenry 14274 Messages postés vendredi 14 mars 2003Date d'inscriptionModérateurStatut 18 octobre 2018 Dernière intervention - 11 sept. 2016 à 22:36
0
Merci
Rapidement, je comprend que tu ne veux conserver qu'une seule occurrence de chaque valeur, j'ai bon ?

Si j'ai bon, tu peux prendre une chaine en entrée et utiliser Split pour déparer les valeurs.
Ensuite, tu peux utiliser la fonction Distinct pour ne garder qu'une seule occurrence : MaListe.Distinct

Si tu ne veux que des nombres, voir avec un Where et un TryCast :
(Par contre, je me rappel plus de la syntaxe VB, je n'ai plus que la C# et comme je n'ai pas d'exemple sur mon PC (et Google est trop loin de ma souris))
int lTmp=0;
MaListe=MaListe.Where((pItem)=>integer.TryCast(pItem,out lTmp)).ToArray();


Pour fusionner le tout :
String.Join

Bonne recherche dans l'aide de Visual Studio pour comprendre tout ce que font ces fonctions.
Karin.code 183 Messages postés vendredi 2 septembre 2016Date d'inscription 16 janvier 2018 Dernière intervention - 11 sept. 2016 à 22:47
désolé mais tu m'a mal compris, par exemple
j'ai i de 0 à 2000 et g() as integer {5,8,9,13,19,26,67,131,168,... etc }
si i = 5 ou 8 ou 13 ou 19 ...etc (tout les valeur de g)
cette valeur de i ne sera pas ajouter dans la RichTextBox
en d'autre terme
RichTextBox1.text= "0,1,2,3,4,6,7,10,11,12,14,15,16 ...etc "
pas de 5 ni de 8 ni de 9 etc dans la RichTextBox
désolé si je n'ai pas bien expliquer
Whismeril 12118 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 19 octobre 2018 Dernière intervention - 11 sept. 2016 à 22:52
Bonsoir, et bien à la place de Distinct, tu fais Except.

https://code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b

Les exemples sont en C#, pour convertir
https://www.google.fr/?gfe_rd=cr&ei=tcPVV4nwA46x8wec5ISQAw#q=C%23+to+vb.net

Au passage
For i As Double = 0 To 30 Step 1
puisque tu as besoin d'entier, ne l'initialise pas en tant que double
Karin.code 183 Messages postés vendredi 2 septembre 2016Date d'inscription 16 janvier 2018 Dernière intervention > Whismeril 12118 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 19 octobre 2018 Dernière intervention - 11 sept. 2016 à 23:24
Merci pour ta réponse j'ai trouvé dans le site que tu ma donner le code suivant (après la conversion) :
Public Sub Linq52()
Dim numbersA() As Integer = New Integer() {0, 2, 4, 5, 6, 8, 9}
Dim numbersB() As Integer = New Integer() {1, 3, 5, 7, 8}
Dim aOnlyNumbers As IEnumerable(Of Integer) = numbersA.Except(numbersB)
Console.WriteLine(" Les chiffres en premi�re rang�e , mais pas la deuxi�me rang�e:")
For Each n In en
aOnlyNumbers
Next
Console.WriteLine(n)
End Sub

si j'ai bien compris il faut comparer entre numbersA et B, il prend les valeurs qui ne sont pas en commun
mais moi j'ai qu'un seul groupe numbersA
esque je doit crée un groupe que contient tout les valeurs de 0 à 5000
Commenter la réponse de NHenry
NHenry 14274 Messages postés vendredi 14 mars 2003Date d'inscriptionModérateurStatut 18 octobre 2018 Dernière intervention - 11 sept. 2016 à 22:55
0
Merci
Ok,

Les outils sont similaire.
Pour savoir si une valeur est contenue dans une liste :
MaListe.Contains(...)

Commenter la réponse de NHenry
Whismeril 12118 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 19 octobre 2018 Dernière intervention - 12 sept. 2016 à 07:10
0
Merci
Bonjour

oui pour utiliser Except il faut 2 collections. Cependant parmi les 101 exemples, il y a la méthode Range https://code.msdn.microsoft.com/LINQ-Generation-Operators-8a3fbff7

Ce qui donne, en suivant les indications de NHenry
			Dim g() As Integer = { 5, 8, 12, 13, 3, 4, 5, 19 }
			Dim resultat As List(Of Integer) = Enumerable.Range(0, 31).Except(g).ToList()
			RichTextBox1.Text = String.Join(",", resultat)


Karin.code 183 Messages postés vendredi 2 septembre 2016Date d'inscription 16 janvier 2018 Dernière intervention - 12 sept. 2016 à 15:23
Merci pour le code
en faite je n'ai pas compris le code NHenry , mais avec ton exemple il devient plus facile à comprendre
Commenter la réponse de Whismeril

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.