Je suis débutant en visual basic et jusqu'a maintenant j'ai toujours réussi a me débrouiller , Et je commence même a aider les plus débutant que moi ...
Une amie m'a demander ( et malheureusement je lui refuse rien )
si je pouvais creer un programme qui lui permettrais d'étudier le vocabulaire d'une langue étrangère ...
Alors j'avais dans l'idée de creer , une première colonne qui contiendrais plein de textbox dans lequel elle insérerais les mot en français et une deuxiême colonne de textbox dans lequel elle insérerais les mot en anglais ( par exemple )
Bon jusque la c'est facile ...
Pour la suite je voudrais creer en bas de cette colonne , un label qui lorsque on clique sur un bouton , se transformerais en un des mots de la premiere colonne , au hasard bien entendu ... ( c'est ça que je ne sais pas faire ... ) et aussi que le programme vérifie que le mot correspond bien a son homologue anglais ...
L'idéal serais que le programme propose de moins en moins les mots auquel on trouve facilement la réponse ...
Un grand merci si vous pouvez m'éclairer :)
A voir également:
[Déplacé VB6 -> VB.NET]Programme pour étude , Hasard ...
Bonjour,
Quel que soit ton outil :
Il te faudra commencer par
- une base de données : un champ pour les mots français et un autre pour leur traduction.
Commence par cela.
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Option Strict On
Public Class Form1
Dim rd As New Random
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
Dim dico As New Dictionary(Of String, String)
dico.Add("chat", "cat")
dico.Add("chien", "dog")
dico.Add("souris", "mouse")
Dim alea As KeyValuePair(Of String, String) = dico.ElementAt(rd.Next(0, dico.Count))
MessageBox.Show(alea.Key & Environment.NewLine & alea.Value)
End Sub
End Class
Bon, je te donne un code tout fait (oui je sais il faut pas le faire) à tester avec un textbox1 et un label1.
Tu peut l'étudier et l'adapter ensuite à ton projet.
Option Strict On
Public Class Form1
Dim rd As New Random
Dim dico As New Dictionary(Of String, String)
Dim solution As String
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
dico.Add("chat", "cat")
dico.Add("chien", "dog")
dico.Add("souris", "mouse")
NouveauMot()
End Sub
Private Sub NouveauMot()
Dim alea As KeyValuePair(Of String, String) = dico.ElementAt(rd.Next(0, dico.Count))
Label1.Text = alea.Key
solution = alea.Value
End Sub
Private Sub TextBox1_KeyUp(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyUp
If e.KeyCode = Keys.Enter Then
If TextBox1.Text = solution Then
MessageBox.Show("bravo!")
Else
MessageBox.Show("pas bon!")
End If
TextBox1.Text = ""
NouveauMot()
End If
End Sub
End Class
Ce n'est toutefois pas au hasard que, faute d'une craie base de données, j'avais proposé l'utilisation d'une listview (qui, elle, permet d'enregistrer d'autres données).
Je suggère qu'on relise jusqu'au bout le tout premier message du demandeur, en particulier sa dernière phrase.
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
On peut faire avec une simple List(Of dans laquelle on ajoute des instances d'une classe (mais ceci sort d'une discussion pour débutants).
Mais je te laisse lui expliquer à ta manière.
Voici quand même un code pour illustrer mon propos :
Option Strict On
Public Class Form1
Dim rd As New Random
Dim MaListe As New List(Of MaClasse)
Dim solution As MaClasse
'classe mots
Public Class MaClasse
Public MotFrancais As String
Public MotAnglais As String
Public Rang As Integer
'bien sur, on peut rajouter des tas d'informations dans cette classe (nom, verbe, conjonction...)
End Class
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
'faire une boucle ici pour le chargement des mots
'ici j'ajoute les mots manuellement dans MaListe
MaListe.Add(New MaClasse With {.MotFrancais "chien", .MotAnglais "dog", .Rang = 0})
MaListe.Add(New MaClasse With {.MotFrancais "chat", .MotAnglais "cat", .Rang = 0})
MaListe.Add(New MaClasse With {.MotFrancais "souris", .MotAnglais "mouse", .Rang = 0})
'premier mot à afficher
NouveauMot()
End Sub
Private Sub TextBox1_KeyUp(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyUp
If e.KeyCode = Keys.Enter Then
If TextBox1.Text = solution.MotAnglais Then
MessageBox.Show("bravo!")
'quand la solution est bonne, on décrémente par exemple le rang de 1
solution.Rang -= 1
Else
'quand la solution n'est pas trouvée, on incrémente de 1
MessageBox.Show("pas bon!")
solution.Rang += 1
End If
TextBox1.Text = ""
NouveauMot()
End If
End Sub
Private Sub NouveauMot()
'on peut ici inventer un algorithme qui sélectionne (ou pas) un mot en fonction de son rang
'sélection au hasard d'une instance de MaClasse de la liste
solution = MaListe.Item(rd.Next(0, MaListe.Count))
Label1.Text = solution.MotFrancais
End Sub
End Class
Bonjour, Banana32,
Expliquer quelle partie sans que MRJulienROCK n'ait préalablement acquis une aisance minimum ?
Ce serait peine perdue à ce stade, d'une part, et, d'autre part, cela relèverait pratiquement totalement de la conception (avant de parler développement) !
A ce stade, donc, il va falloir se contenter de lui exposer la logique d'un mécanisme.
- une listvieaw ou un tableau dynamique à 3 colonnes : colonne 1 mot français - colonne 2 traduction - colonne 3 = nombre de tirage de ce mot
- pour proposer un mot : tirage aléatoire d'un rang dans la listview (ou le tableau) == >> montrer ce nom dans un label et demander à l'utilisateur sa proposition de traduction (dans une textbox)
- chaque fois que réponse bonne : augmenter de 1 la valeur en colonne 3
En rappelant qu'il suffit d'avoir mémorisé le rang pour tout gérer convenablement.
Voilà pour ce qui est de la partie "élémentaire".
Ce ne sera que lorsqu'il aura passé ce cap-là (maîtrise de tout cela), qu'il pourra aller au-delà !
Je lui conseille dans un premier temps de se montrer moins "gourmand" et de se contenter de ne plus tirer un mot au hasard s'il a déjà fait l'objet de plus de x bonnes réponses (il suffit alors de supprimer de la listview ( plus facile qu'avec un tableau dynamique ) l'article du rang traité si le nombre en colonne 3 est( supérieur ou égal à x). Il ne risquera alors plus d'être tiré aléatoirement de nouveau.
Le passage à l'étape plus "ambitieuse", par contre (celle qui consisterait en une "chance dégressive" de tirage d'un mot (en fonction de la connaissance de ce mot déjà acquise par l'"élève") est une affaire bien plus complexe, qu'il ne saurait comprendre ni aborder tant qu'il n'aura pas d'abord su passer l'étape "simple" proposée.
Il lui faudra alors nécessairement tirer au hasard, mais dans une liste (à chaque fois reconstituée) constituée d'une répétition des mots, chaque mot un nombre de fois à calculer individuellement pour lui donner son pourcentage de chances (décroissant, donc) d'être "tiré" ensuite.
Voilà voilà !
Il est clair que l'on ne peut aller plus loin sans que MRJulienROCK ne se soit familiarisé avec la gestion d'une listview.
Amitiés.
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Bonjour , merci de m'avoir répondu malheureusement j'étais dans la mauvaise section ...
J'ai creer les deux liste pour les base de donnée , sans problème , c'est après que je bloque ... Je me suis rendu sur une 20 aine de site différent sans trouver de réponse :s a tu une idée ?
Ce ne sont pas des textboxes, qu'il te faut alors utiliser, mais, plus astucieusement, une listview (car permettent deux colonnes alors qu'une listbox n'en permet qu'une sous VB6)
Ensuite :
- dans la première colonne : les mots en français
- dans la seconde : leur traduction
- cache simplement la seconde colonne (largeur = 0)
commence par faire cela et reviens pour la suite.
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Ou encore un tableau à deux dimensions.
Mais d'où viennent donc les données, exactement ?
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
En faite les donnée je ne les connais pas , l'idée serait que l'utilisateurs note lui même chaque mot en français et leurs traduction dans l'autre langue ...
Après un mot de la colone serait tiré au hasard , et il faudrais noter la traduction , pour s'exercer ...
et aussi que le programme vérifie que le mot correspond bien a son homologue anglais ...
Il faudra bien qu'existe une liste (ou un tableau) des mots et de leur traduction.
Ce que j'ai, moi, compris, c'est qu'il veut y tirer ensuite un mot français au hasard, demander à l'utilisateur la traduction et en vérifier l'exactitude (par rapport à la liste).
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Un admin redirigera ce fil à la bonne place et supprimera le nouveau que tu as créé.
Banana32 est un devin :D
---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices.[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : ).[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés/list ---
Mon site
Bonjour, NHenry,
Toi également si c'est toi qui a déplacé vers VB.Net
A partir de quel indice qui m'a échappé ?
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Ucfoutu, nouveau (et défunt) message dans la catégorie .NET, c'est tout :)
---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices.[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : ).[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés/list ---
Mon site
Lerci pour vos réponse !!! et encore désoler pour l'erreur , je vous join une capture d'écran de l'interface graphique de mon programme ...
Dans ce programme , j'aimerais que le Label 3 prennent le nom d'une des textbox au hasard et le label 5 se transforme en Faux ou vrai en fonction de si l'utilisateur a bien mis la bonne réponse .
NHenry
On peut charger les mots dans un dictionary(of par exemple sans pour autant les afficher dans un contrôle. La clef étant le mot français et la valeur le mot anglais. La machine génère un nombre aléatoire compris entre 0 et la taille du dico - 1 et affiche la clef du dico correspondant à ce nombre. Lorsque l'utilisateur tape son mot, on compare la saisie avec la 'Value' du dico.