Karin.code
Messages postés183Date d'inscriptionvendredi 2 septembre 2016StatutMembreDernière intervention16 janvier 2018
-
22 nov. 2016 à 19:55
Karin.code
Messages postés183Date d'inscriptionvendredi 2 septembre 2016StatutMembreDernière intervention16 janvier 2018
-
25 nov. 2016 à 14:03
Bonsoir,
mon problème est le suivant :
je voulais vérifier si un mot existe dans un tableau, en l'écrivant dans un textbox
je voulais que se soit vérifier automatiquement c-à-d à chaque fois que j'écris une lettre dans la Textbox par exemple :
dans le tableau il y a le mot suivant : "Gravier naturel"
Si je tape dans la Textbox : une première lettre "G"
alors rien ne s'affiche car il existe un mot dans le tableau avec la première lettre "G"
Si je tape dans la Textbox : une deuxième lettre "r" (le texte devient "Gr")
alors rien ne s'affiche car il existe un mot dans le tableau avec la première lettre "G" et la deuxième lettre "r"
Si je tape dans la Textbox : une Troisième lettre "i" (le texte devient "Gri")
Un message s'affiche car il le text écrit dans la TextBox n'existe pas ( un mot avec la première lettre "G" , la deuxième lettre "r" et la Troisième lettre "i" (Gri) n'existe pas dans le tableau)
j'ai pris une partie du code de l'un des poste de Kikou93, voici le code que j'ai créer :
Public Class Form1 Dim tableau() As String = {"Pavidrain", "Gravier maury", "Calcaire concassé ivoire", "Graviers de basalte", "Gravier palvdecor", "Graviers de dordogne"} Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged If TextBox1.Text.Length > 0 Then For i As Integer = 0 To tableau.Count - 1 If Strings.Left(TextBox1.Text, TextBox1.Text.Length) <> Strings.Left(tableau(i).ToString, TextBox1.Text.Length) Then MessageBox.Show("Ce type n'existe pas.", "Avertissement", MessageBoxButtons.OK, MessageBoxIcon.Warning) End If Next End If End Sub End Class
Je ne vois pas ou j'ai fait une erreur, quelqu'un pour me dire mon erreur
Merci pour votre aide
Whismeril
Messages postés18972Date d'inscriptionmardi 11 mars 2003StatutContributeurDernière intervention11 mars 2024653 22 nov. 2016 à 20:45
Bonsoir
ça lit "Pavidrain" et ça te dit qu'il ne commence pas par G, puis ça lit "Gravier maury" et là ça ne te dit rien, puis ça lit "Calcaire concassé ivoire" et ça te dit qu'il ne commence pas par G, etc...
L'idée serait que tu fasses la recherche complète et qu'ensuite s'il n'y a pas de résultat, tu mettes le message.
Dim tableau() As String = { "Pavidrain", "Gravier maury", "Calcaire concassé ivoire", "Graviers de basalte", "Gravier palvdecor", "Graviers de dordogne" }
Dim texte As String = "G"
If tableau.Where(Function(x) x.StartsWith(texte)).Count() = 0 Then
MessageBox.Show("Y'en a pas")
End If
Tu peux même afficher le résultat dans une ListBox pour montrer à l'utilisateur ce qu'il peut taper, parce que moi un message à chaque touche pas bonne ça m'agacerait très vite
Dim tableau() As String = { "Pavidrain", "Gravier maury", "Calcaire concassé ivoire", "Graviers de basalte", "Gravier palvdecor", "Graviers de dordogne" }
Dim texte As String = "G"
Dim resultat As List(Of String) = tableau.Where(Function(x) x.StartsWith(texte)).ToList()
If resultat.Count = 0 Then
MessageBox.Show("Y'en a pas")
Else
listBox1.DataSource = resultat
End If
Karin.code
Messages postés183Date d'inscriptionvendredi 2 septembre 2016StatutMembreDernière intervention16 janvier 20182 22 nov. 2016 à 21:02
Bonsoir Whismeril,
Merci Pour ton aide le code fonction très bien, pour la ListeBox c'est une bonne idée merci
juste une dernière chose si ça ne te dérange pas bien sûr
je voulais utilisé dans une autre partie du programme une Combobox au lieu d'un tableau et d'une TextBox
J'ai fait ça avec ton code mais ça ne fonction pas
Private Sub ComboBox1_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ComboBox1.TextChanged For i As Integer = 0 To ComboBox1.Items.Count - 1 If ComboBox1.Items(i).Where(Function(x) x.StartsWith(ComboBox1.Text)).Count() = 0 Then 'Action End If Next End Sub
pourquoi?
Whismeril
Messages postés18972Date d'inscriptionmardi 11 mars 2003StatutContributeurDernière intervention11 mars 2024653 22 nov. 2016 à 21:59
Karin.code
Messages postés183Date d'inscriptionvendredi 2 septembre 2016StatutMembreDernière intervention16 janvier 20182
>
Whismeril
Messages postés18972Date d'inscriptionmardi 11 mars 2003StatutContributeurDernière intervention11 mars 2024 Modifié par Karin.code le 22/11/2016 à 22:27
tant que le texte que tu saisie dans la ComboBox existe dans la ListItems de la ComboBox une liste s'affiche avec des suggestions
si il n'existe pas après avoir taper la dernière lettre la liste des suggestions sera vide
dans se cas la je voulais qu'il efface Automatiquement la dernière lettre saisie avec le code :
Bonjour
Juste pour éclairer ma lanterne (je ne connais rien de VB.Net, mais ai certains réflexes) :
que retourne :
If Strings.Left(TextBox1.Text, TextBox1.Text.Length)
?
Car pour moi (pauvre même pas débutant en VB.Net) , au 1er coup d'oeil, je ne vois aucune logique (si la syntaxe est bonne, ce que j'ignore) qui différencierait le résultat de la propriété TextBox1.text
Mais bon ... je ne connais rien de VB.Net ...
EDIT : pour être très clair et SI TextBox1.Text.Length est comme je le pense le nombre de caractères que contient TextBox1.Text, je me demande comment l'on pourrait penser que tout ce qu'il y a dans une phrase, depuis son début (à gauche) jusqu'à sa fin serait différent de ce qu'est déjà la phrase ..... !!!
________________________
Nul ne saurait valablement coder ce qu'il ne saurait exposer clairement.
Karin.code
Messages postés183Date d'inscriptionvendredi 2 septembre 2016StatutMembreDernière intervention16 janvier 20182 22 nov. 2016 à 20:48
Bonsoir ucfoutu,
Merci pour m'avoir répondu
C'est vrais j'ai fait une gros faut (que même un débutant ne le ferais pas)
dans ce qu'a la il y a pas de différence entre
TextBox1.Text
et
Strings.Left(TextBox1.Text, TextBox1.Text.Length)
si je voulais par exemple vérifier si les trois première lettre d'un long mot que se trouve dans la TextBox existe dans le tableau, cette méthode serait juste
Whismeril
Messages postés18972Date d'inscriptionmardi 11 mars 2003StatutContributeurDernière intervention11 mars 2024653 22 nov. 2016 à 20:50
Bonsoir UC, je n'avais pas réactualisé la page, avant de poster ma réponse.
La propriété Length retourne bien le nombre de caractères d'un string.
Donc effectivement ce bout de code, retourne lui même.
En plus String(sans s).Left n'est pas du VB.Net mais un import de VB6.
Karin.code
Messages postés183Date d'inscriptionvendredi 2 septembre 2016StatutMembreDernière intervention16 janvier 20182
>
Whismeril
Messages postés18972Date d'inscriptionmardi 11 mars 2003StatutContributeurDernière intervention11 mars 2024 22 nov. 2016 à 21:06
je me trompe peut être mais normalement pour vérifier si un code est un code vb.net ou vb6 on ajoute
Option Explicit On
Option Strict On
Whismeril
Messages postés18972Date d'inscriptionmardi 11 mars 2003StatutContributeurDernière intervention11 mars 2024653
>
Karin.code
Messages postés183Date d'inscriptionvendredi 2 septembre 2016StatutMembreDernière intervention16 janvier 2018 22 nov. 2016 à 21:58
Non ça n'est pas ça, il faut activer ces options pour se forcer à utiliser de bonnes pratiques, mais pour l'import VB6, c'est dans les références
Voici une capture pour VS2013
vb95
Messages postés3463Date d'inscriptionsamedi 11 janvier 2014StatutContributeurDernière intervention 1 mars 2024168
>
Karin.code
Messages postés183Date d'inscriptionvendredi 2 septembre 2016StatutMembreDernière intervention16 janvier 2018 Modifié par vb95 le 22/11/2016 à 22:15
Bonsoir Karin.code
Option Explicit et Option Strict n'ont rien à voir avec le fait que le code soit VB Net et VB 6
1) Option Explicit t'oblige à déclarer toutes tes variables
2) Option Strict t'interdit de convertir implicitement un type de variable en un autre
Par contre pour éviter de mettre du pseudo code Vb 6 dans un projet VB Net tu fais ainsi :
1) tu vas dans Propriétés de ton projet
2) tu cliques dans Références
3) tu décoches Microsoft VisualBasic dans la liste en bas
Ceci fait que ton projet ne contient plus la référence à Vb 6 et ne peut plus utiliser les instructions et fonctions de VB 6 et que tu es obligée de n'utiliser que des instructions et fonctions VB Net
Prends le chaine "Microsoft VisualBasic"
=
Dim chaine as String = "Microsoft VisualBasic" Dim chnleft1 as String = Left(chaine,9) ' c'est de l'Import VB 6 Dim chnleft2 as String = chaine.Sustring(0,9) ' c'est du vrai VB Net
Les 2 donnent comme résultat "Microsoft" et sont corrects . Mais pourquoi mettre du VB 6 alors que l'on programme en VB Net ? C'est comme si on avait une moto Harley Davidson avec un moteur de mobylette !
Pour ce code
Private Sub ComboBox1_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ComboBox1.TextChanged For i As Integer = 0 To ComboBox1.Items.Count - 1 If ComboBox1.Items(i).Where(Function(x) x.StartsWith(ComboBox1.Text)= True).Count = 0 Then 'Action End If Next End Sub
Il manque le " = True" dans ton code: la fonction doit avoir un signe de comparaison (= ou > ou < ou etc.....) et une valeur à comparer sinon ce n'est pas une fonction
kikou93
Messages postés417Date d'inscriptionmardi 4 février 2014StatutMembreDernière intervention24 septembre 20181 24 nov. 2016 à 19:33
Salut Karin.code
je pas le bonjour aussi a vb95 et Whismeril
je voulais utiliser le code de vb95 dans l'application que je travail sur elle en ce moment même, mais comme il à dit c'est vraiment énervant que à chaque fois que je tape une fausse lettre un message s'affiche, ou l'utilisateur peut ne pas comprendre pourquoi quand il tape une lettre celle-ci ne s'affiche pas car en réalité elle s'efface a la seconde ou elle sera écrit
je viens de trouver ce code et il ma l'aire plus approprié, c'est vrais il ne s'active pas à chaque fois que tu tape une lettre, il s'active a la fin aprés que le contrôle n'a plus le focus
Private Sub ComboBox1_Validatiog(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles ComboBox1.Validating If ComboBox1.Items.Contains(ComboBox1.Text) Then 'Action Else MessageBox.Show("Ce texte n'appartient pas à la liste", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information) ComboBox1.Text = "" 'ou ' ComboBox1.Text = ComboBox1.Items(0).ToString End If End Sub
Whismeril
Messages postés18972Date d'inscriptionmardi 11 mars 2003StatutContributeurDernière intervention11 mars 2024653 24 nov. 2016 à 21:12
Bonsoir
le truc c'est que l'on a répondu au besoin de Karin.Code.
Je suis d'accord, en tant qu'utilisateur ne pas comprendre pourquoi la lettre que je tapes n'apparait pas est frustrant, alors qu'avoir un message à chaque touche fausse est agaçant.
Mais ce que tu proposes ne me plait pas non plus, une fois que j'ai tout tapé ça me dit "eh ben non!!!".
Il faut savoir être efficace donc informer clairement aussitôt qu'une touche est fausse sans être bloquant (la message box), c'est pourquoi j'ai proposé plus haut deux options qui ont général un bon retour utilisateur:
une listBox ou apparaissent les mots encore possible avec la saisie en cours, ça a l'avantage que l'on peut faire la recherche sur tout le corps du texte, par exemple, si je veux le Gravier palvdecor, sachant qu'il y a plusieurs graviers, je peux faire la recherche sur palvdecor.
L'autocomplétion, j'ai mis un lien vers un tuto plus haut.
Ces 2 options me semblent plus en phase avec ton besoin, qui je le rappelle n'est pas celui de Karin.Code.
kikou93
Messages postés417Date d'inscriptionmardi 4 février 2014StatutMembreDernière intervention24 septembre 20181
>
Whismeril
Messages postés18972Date d'inscriptionmardi 11 mars 2003StatutContributeurDernière intervention11 mars 2024 24 nov. 2016 à 22:40
Bonsoir Whismeril,
Je m'excuse si me suis mal exprimé, mais je n'ai pas dit que c'était la meilleur solution, ce code peut être un plus pour le code que tu à mentionné plus haut
par exemple si en fait copier/coller d'un mot qui n'est pas dans la liste il ne sera pas effacer ou quand il efface la dernière lettre il reste le mot incomplèt, est que l'utilisateur passe à un autre contrôle ou clique sur la touche Entrer (avec le code suivant):
Private Sub ComboBox1_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles ComboBox1.KeyUp
If e.KeyCode = Keys.Enter Then 'Si en clique sur la touche Entrer
'Action
End If
End Sub
un message s'affiche
on peut utiliser le code que j'ai mentionné plus haut pour éviter les erreur
22 nov. 2016 à 21:02
Merci Pour ton aide le code fonction très bien, pour la ListeBox c'est une bonne idée merci
juste une dernière chose si ça ne te dérange pas bien sûr
je voulais utilisé dans une autre partie du programme une Combobox au lieu d'un tableau et d'une TextBox
J'ai fait ça avec ton code mais ça ne fonction pas
pourquoi?
22 nov. 2016 à 21:59
Modifié par Karin.code le 22/11/2016 à 22:27
http://codes-sources.commentcamarche.net/forum/affich-10071123-creer-une-combobox-police-comme-celle-de-word#p10071167
j'ai choisi ça :
tant que le texte que tu saisie dans la ComboBox existe dans la ListItems de la ComboBox une liste s'affiche avec des suggestions
si il n'existe pas après avoir taper la dernière lettre la liste des suggestions sera vide
dans se cas la je voulais qu'il efface Automatiquement la dernière lettre saisie avec le code :