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

Messages postés
183
Date d'inscription
vendredi 2 septembre 2016
Dernière intervention
16 janvier 2018
- - Dernière réponse : Karin.code
Messages postés
183
Date d'inscription
vendredi 2 septembre 2016
Dernière intervention
16 janvier 2018
- 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

4 réponses

Meilleure réponse
Messages postés
1725
Date d'inscription
samedi 11 janvier 2014
Dernière intervention
11 décembre 2018
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

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 100 internautes ce mois-ci

Karin.code
Messages postés
183
Date d'inscription
vendredi 2 septembre 2016
Dernière intervention
16 janvier 2018
-
Merci pour le cadeau
je vais prendre tes remarques en considération
merci encore vb95
Commenter la réponse de vb95
Messages postés
14319
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
11 décembre 2018
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
Messages postés
183
Date d'inscription
vendredi 2 septembre 2016
Dernière intervention
16 janvier 2018
-
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
Messages postés
12371
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
11 décembre 2018
-
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
Messages postés
183
Date d'inscription
vendredi 2 septembre 2016
Dernière intervention
16 janvier 2018
> Whismeril
Messages postés
12371
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
11 décembre 2018
-
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
Messages postés
14319
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
11 décembre 2018
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
Messages postés
12371
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
11 décembre 2018
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
Messages postés
183
Date d'inscription
vendredi 2 septembre 2016
Dernière intervention
16 janvier 2018
-
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.