locked
[VB 2008 Ex] Autocomplet d'un textbox RRS feed

  • Question

  • Bonjour / bonsoir,

    Je n'arrive pas à compléter un textbox par  autocomplet provenant d'un fichier.

    Ce  fichier "toto.txt"  contient par ex des noms.

    J'aimerais quand je quand je commence a écrire un nom, qu'il me propose un un / des choix provenant de ce fichier.

     

    En espérant d'avoir était assez claire .-)

     

    D'avance merci

    jeudi 29 avril 2010 17:06

Réponses

  • Salut

    alors pour que ton textbox te propose des choix en fonction des touches entrées en passant par autocomplet

    tu dois définir la propriété autocompletmode a suggest

    définir sa source "le fichier"

    voici un exemple:

    Imports System.IO
    Public Class Form2
      '-------declaration du flux de lecture du fichier
      Dim fichier As New StreamReader("C:\Documents and Settings\Administrateur\Bureau\essai.txt")
    
      Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    
        '-------définition de mode de suggestion et de la source
    
        TextBox1.AutoCompleteMode = AutoCompleteMode.Suggest
        TextBox1.AutoCompleteSource = AutoCompleteSource.CustomSource
    
        '-------lecture de chaque ligne pour la mettre dans la source
    
        Do Until fichier.Peek = -1
          TextBox1.AutoCompleteCustomSource.Add(fichier.ReadLine())
        Loop
        '-------ensuite on ferme le flux
        fichier.Close()
      End Sub
    End Class

    j'espère t'avoir aider

    Amicalement


    Si à la seule lecture des commentaires de votre code l'on ne sait pas ce que fait votre programme jetez le tout. IBM
    jeudi 29 avril 2010 21:49

Toutes les réponses

  • Bonjour,

     

    Eh... il y a un traitement à faire derrière avec le code, ça ne marche pas encore tout seul.

     

    Récapitulon : tu as un txtbox avec sur une colonne des noms, et tu voudrais que quand on commence à saisir un nom (dans un autre objet), le nom te soit proposé, ou une liste de noms approchant., ce qui va compliquer car il va falloir une liste ou un autre txtbox pour affichier les noms approchant, les effaçant au fur et à mesure que la saisie va se complémter. Il faut si possible aussi que les noms soit classés alphanumériquement (nota bene), tu peux aussi faire ça sans voir les noms, directement sur le fichier...

    A mon sens on peut avoir le résultat avec moins de code derrière si tu mets tes noms dans un listbox (il doit y en avoir moins de 32.000), et donc ensuite en cliqnat dans la liste afin de lui donner le focus, tu saisie une, deux, trois lettre rapidement, et la liste (elle est faite comme ça), va t'amener à proximité de ta recherche, si ce n'est dessus, ensuite tu n'auras plus qu'à double cliquer sur le bon nom, et il s'affichera tout seul dans ton objet, c'est pas miraculeux ça ?

     

    Je peut te faire le code, mais je voudrais déjà savoir si tu maintiens ton textBox avec le code qui va devoir être plus important, ou si tu optes pour la liste comme je te l'ai proposé, dès que j'auirais ta réponse, si tu le veux je te fais le code.

     

    Cordialement.

     

    Joe.


    Joe ___ Romans et Logiciels ___ http://irolog.free.fr
    jeudi 29 avril 2010 20:54
  • Salut

    alors pour que ton textbox te propose des choix en fonction des touches entrées en passant par autocomplet

    tu dois définir la propriété autocompletmode a suggest

    définir sa source "le fichier"

    voici un exemple:

    Imports System.IO
    Public Class Form2
      '-------declaration du flux de lecture du fichier
      Dim fichier As New StreamReader("C:\Documents and Settings\Administrateur\Bureau\essai.txt")
    
      Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    
        '-------définition de mode de suggestion et de la source
    
        TextBox1.AutoCompleteMode = AutoCompleteMode.Suggest
        TextBox1.AutoCompleteSource = AutoCompleteSource.CustomSource
    
        '-------lecture de chaque ligne pour la mettre dans la source
    
        Do Until fichier.Peek = -1
          TextBox1.AutoCompleteCustomSource.Add(fichier.ReadLine())
        Loop
        '-------ensuite on ferme le flux
        fichier.Close()
      End Sub
    End Class

    j'espère t'avoir aider

    Amicalement


    Si à la seule lecture des commentaires de votre code l'on ne sait pas ce que fait votre programme jetez le tout. IBM
    jeudi 29 avril 2010 21:49
  • Bonjour / bonsoir,

    Merci de vos réponses rapide et pour le code que je vais etudié avec grand soin...

    Pour la listbox j' n'y avais pas pensé.

    Ca donne quoi avec une listbox ???

    J'avais d'abord penser de saisir tout les noms dans la propriété du txtbox.

    Le probème c'est quand il y a des noms qui ce rajoute, c'était comment faire autrement.

    Encore merci de vos réponses et du code.

    A+

     

    • Modifié Marco67 vendredi 30 avril 2010 09:07
    vendredi 30 avril 2010 09:03
  • Bonjour,

    En cas d'ajout d'un nom, vous devez l'ajouter vous même dans le fichier et l'ajouter aussi dans l'AutoCompleteCustomSource.

    Cordialement


    Gilles TOURREAU - MVP C# - Architecte .NET/Consultant/Formateur
    vendredi 30 avril 2010 09:07
    Modérateur
  • Bonjour,

    En cas d'ajout d'un nom, vous devez l'ajouter vous même dans le fichier et l'ajouter aussi dans l'AutoCompleteCustomSource .

    Cordialement


    Gilles TOURREAU - MVP C# - Architecte .NET/Consultant/Formateur

    Oui donc après chaque rajout, recompiler le code, c'est pour cela que je voulais savoir les autres possibilités.

    A+

     

     

    vendredi 30 avril 2010 09:11
  • Bonjour,

    Pas besoin de recompilation. Par programmation, il faut ajouter le nom dans votre fichier et ré-exécutez le code de "mmw001".

    Cordialement


    Gilles TOURREAU - MVP C# - Architecte .NET/Consultant/Formateur
    vendredi 30 avril 2010 09:24
    Modérateur
  • Bonjour Marco,

     

    Ben à mon sens la liste est plus propice à ce que tu veux faire, déjà elle réagit plus rapidement, se charge plu vite, et a sans aucun paramétrage cette fonction de recherche rapide avec le début du nom, elle classe aussi (sorted = true).

     

    Le principe général sera la lecture du fichier texte, la mise en liste.

    Par contre s'il y a aussi des rajouts, alors l'objet prévu pour ce type de manipulation est le comboBox en mode rajout, qui ensuite se gère comme une liste. En dernier au moment défini par toi, tu ouvres le fichier en écriture (et non pas en rajout), puis tu lui vides la lsite dedans et c'est sauvegardé pour les ajouts et le reste dans l'ordre alpha de la liste. Ça c'est sans procédure de sauvegarde et reprise, en cas d'accident, ce qui est très rare sur les fichiers, mais si tu appréhendes un risque de pertes de datas, tu renommes ton fichier d'origine (.tmp), puis tu crée un nouveau fichier texte (au nom définitif d'origine) dans lequel tu envoies la liste, puis tu supprimer ton fichier tmp, ce qui fait qu'au lancement on teste si le fichier tmp existe, et s'il existe ça veut dire qu'on va tenter de récupérer les donnée anciennes à partir de ce dernier comme sus-cité...

     

    Cordialement.

     

    Joe.


    Joe ___ Romans et Logiciels ___ http://irolog.free.fr
    vendredi 30 avril 2010 14:23
  • Salut

    en essayant le code de mmw01 elle ne marche pas.le textbox ne se rempli pas des données du fichier.

    mercredi 9 octobre 2013 14:14
  • Bonjour,

    Vous avez déjà posé votre question dans un autre thread (http://social.msdn.microsoft.com/Forums/fr-FR/e014a3be-2687-475b-b230-f4fcd63b61bf/textbox-autocompletecustomsource?forum=vbasicfr) . Je verrouille la discussion afin de ne pas mélanger les réponses.

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0

    mercredi 9 octobre 2013 18:29
    Modérateur