IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Ma première application en VB.


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 7
    Par défaut Ma première application en VB.
    Bonjour tout le monde.

    Je viens de me mettre au visual basic et j'utilise Microsoft Visual Basic 2008 Express. J'ai saisi quelques bases mais il y a certaines choses sur lesquelles je bloque, et je vous assure que je me suis creusé la tête avant de vous poser ces questions, je n'aime pas trop demander mais là je sèche vraiment. Alors voilà je vais essayer d'expliquer ce avec quoi j'ai du mal le plus clairement possible, en espérant que je serais suffisamment clair pour vous (comme on dit: un problème correctement expliqué est un problème à moitié résolu ^^)

    Je souhaite créer avec Visual Basic 2008 une application qui, lorsqu'on clic sur un bouton, ça écrive quelque chose dans une zone de saisie de texte.

    Par exemple, je souhaite que lorsqu'on l'utilisateur écrive quelque chose dans un Champ de texte (que je nomme ChampText, dans l'exemple ci dessous c'est "blabla") puis appuie sur un bouton que je nommerais"IF"
    Ca me crée dans une zone de texte un:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    	IF (blabla)
     
    	ELSE
     
    	END
    Bon, ça c'est fait, voici le code que j'ai assigné au bouton "IF":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            TextBox1.Text = TextBox1.Text.Substring(0, TextBox1.SelectionStart) + Chr(9) + "IF" + " (" + ChampText.Text + ")" + Environment.NewLine + Chr(9) + Chr(9) + Environment.NewLine + Chr(9) + "ELSE" + Environment.NewLine + Chr(9) + Chr(9) + Environment.NewLine + Chr(9) + "END" + Environment.NewLine + TextBox1.Text.Substring(TextBox1.SelectionStart)
            ChampText.Clear()
    Ainsi ca marche très bien.
    Mais c'est après que je bloque... Je voudrais que lorsque l'utilisateur cliquera entre le IF et le ELSE déja insérés dans la zone de texte, son curseur soit à une tabulation par rapport au bord de ma TextBox1 et lorsqu'il recliquera de nouveau sur le bouton "IF" , ça écrira un nouveau IF, ELSE et END avec cette fois 2 tabulation par rapport au bord comme ci dessous:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    	IF ()
    		IF ()
     
    		ELSE
     
    		END
     
    	ELSE
     
    	END
    Hors, là ce que j'obtiens dans ma TextBox1 avec ce code c'est ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    	IF ()
    		IF ()
     
    	ELSE
     
    	END
     
    	ELSE
     
    	END
    Qu'est ce qui pèche dans mon code? Je ne sais pas trop ou est mon erreur...

    Seconde question:

    En cliquant sur un bouton, comment puis-je afficher une fenêtre proposant à l'utilisateur d'enregistrer le contenu de sa TextBox1 dans un fichier *.txt ?

    Troisième question !


    J'ai crée une zone de saisie de Texte que j'apelle "ChampNum". Je désirerais qu'il soit possible pour l'utilisateur de ne saisir que des chiffres dedans. Si l'utilisateur tente de saisir une lettre, il reçoit un message d'erreur lui indiquant qu'il n'est possible d'écrire que des chiffres dedans ! Comment procéder ?

    Dernière question...

    Je souhaite que si l'utilisateur saisisse une valeur numérique (dans l'exemple la valeur saisie est "6" dans "ChampNum" puis click sur le bouton que j'ai nommé "BLOCK", celà écrive dans le TextBox1:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    	Block (1)
     
    	Block (2)
     
     
    	Block (3)
     
     
    	Block (4)
     
     
    	Block (5)
     
     
    	Block (6)
    Quel est dans ce cas le Code à associer au bouton "block" ? Ou du moins, quelles dont les fonctions à utiliser et comment fonctionnent ces fonctions?


    Voilà ! Je vous remercie d'avance si vous prenez la peine de répondre et veuillez me pardonner ma N00bitude !! Cordialement,

    Denis

  2. #2
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2010
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2010
    Messages : 151
    Par défaut
    Salut,

    Je pense que je peux apporter une solutions aux 3 dernières questions.

    Citation Envoyé par Denis61400 Voir le message
    Seconde question:

    En cliquant sur un bouton, comment puis-je afficher une fenêtre proposant à l'utilisateur d'enregistrer le contenu de sa TextBox1 dans un fichier *.txt ?
    Il faut utiliser le contrôle SaveFileDialog pour demander à l'utilisateur le chemin d'enregistrement. Il y a peut être un bémol au niveau du WriteLine, car tu utilise peut être un RichTextBox au lieu du TextBox.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim sfd As New Windows.Forms.SaveFileDialog()
    If (sfd.ShowDialog() = Windows.Forms.DialogResult.OK) Then
        Dim sw As StreamWriter = My.Computer.FileSystem.OpenTextFileWriter(sfd.FileName, False)
        sw.WriteLine(TextBox1.Text)
        sw.Close()
    End If
    sfd.Dispose()

    Citation Envoyé par Denis61400 Voir le message
    Troisième question !
    J'ai crée une zone de saisie de Texte que j'apelle "ChampNum". Je désirerais qu'il soit possible pour l'utilisateur de ne saisir que des chiffres dedans. Si l'utilisateur tente de saisir une lettre, il reçoit un message d'erreur lui indiquant qu'il n'est possible d'écrire que des chiffres dedans ! Comment procéder ?
    Il faut gérer l'évenement TextChanged et vérifier que c'est bien une chaine qui ne contient que des chiffres :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
        Dim a As New ArrayList({"0"c, "1"c, "2"c, "3"c, "4"c, "5"c, "6"c, "7"c, "8"c, "9"c})
        Private Sub TextBox1_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
            If (Not a.Contains(e.KeyChar)) Then
                e.KeyChar = "" 'Par contre empeche l'effacement
                Label1.Text = "Il faut entrer un chiffre"
            Else
                Label1.Text = ""
            End If
        End Sub
    Par contre, je ne sais pas comment annuler la saisie correctement. Surement une annulation de l'évenement.

    EDIT 22:52
    Tu peux aussi utiliser le contrôle NumericUpDown, et au lieu de .Text, tu récupères .Value

    Citation Envoyé par Denis61400 Voir le message
    Dernière question...
    Je souhaite que si l'utilisateur saisisse une valeur numérique (dans l'exemple la valeur saisie est "6" dans "ChampNum" puis click sur le bouton que j'ai nommé "BLOCK", celà écrive dans le TextBox1:

    Quel est dans ce cas le Code à associer au bouton "block" ? Ou du moins, quelles dont les fonctions à utiliser et comment fonctionnent ces fonctions?
    Tu écris de la même façon que ton IF, mais tu récupères ChampNum.Text au leur de ChampText

    @+
    Mat

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 7
    Par défaut
    Salut Mat

    Merci pour tes réponses

    Il y a certaines choses qui ne fonctionnent pas.

    Tout d’abord pour la réponse à ta première question, le logiciel me dit comme erreur que: Type 'StreamWriter' non défini. J'utilise bien un TextBox et non un RichTextBox.

    Pour ta réponse à ma 3ème question, pas de soucis, j'y suis arrivé.

    Pour ta réponse à ma dernière question il me semble que tu n'ai pas bien saisi ce que j'essayais d'expliquer. Ou alors je n'ai pas bien compris ta réponse.

    Je voudrais que lorsque l'utilisateur saisisse un chiffre dans ma zone de saisie "ChampNum", celà affiche dans ma TextBox1 autant de champs "BLOCK" que la valeur saisie avec un ordre croissant affiché automatiquement entre les ().

    Concrètement, je rentre la valeur "5" dans ChampNum , je click sur mon bouton "BLOCK" et j'obtiens dans ma zone de texte:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    	Block (1)
     
    	Block (2)
     
    	Block (3)
     
    	Block (4)
     
    	Block (5)
    Si j'avais entré la valeur "3", j'aurais donc obtenu dans ma TextBox1 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    	Block (1)
     
    	Block (2)
     
    	Block (3)
    Je cherche donc un code du type:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    IF (Valeur de ChampNum<1)
    Afficher un message: "Veuillez saisir une valeur avant de cliquer sur BLOCK !"
    ELSE
         LOOP 1 to Valeur de ChampNum
         TextBox1.Text = "Block" + "(1 to Valeur de ChampNum")
         END LOOP
    END IF
    Je voudrais que a chaque fois que la boucle fait un tour, la valeur de ChampNum s'incrémente dans les parenthèses qui suivent "BLOCK", et ce de 1 à la valeur max de mon ChampNum.

    J'espère que j'ai mieux expliqué cette fois çi. ;D

  4. #4
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2010
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2010
    Messages : 151
    Par défaut
    Alors, pour le StreamWriter, il faut que tu importes le System.IO (tu peux le voir en restant la souris sur ton StreamWriter, il te proposera les corrections automatiques.

    Tu n'étais pas loin avec ton algo :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    If (Val(ChampNum.Text)<1)
        MsgBox( "Veuillez saisir une valeur avant de cliquer sur BLOCK !")
    Else
         For i As Short = 1 To Val(ChampNum.Text)
         TextBox1.Text &= "Block(" & i & ")" & VbCrLf 'le VbCrLf est peut etre obsolète, mais il marche toujours
         End For
    End If

  5. #5
    Membre Expert Avatar de Er3van
    Homme Profil pro
    Architecte Logiciel
    Inscrit en
    Avril 2008
    Messages
    1 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte Logiciel
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2008
    Messages : 1 430
    Par défaut
    Des remarques en vrac suite aux réponses ci-dessus :

    - Pour filtrer les caractères numériques (ou alphanumériques peut-importe), le mieux c'est de passer par des RegEx (expression régulières). Tu peux le faire avec des contrôles/extendeurs très facilement.

    - Utiliser des méthodes héritées de VB (et donc non intégrées au framework .net) est déconseillé. C'est voué à disparaître.

  6. #6
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2010
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2010
    Messages : 151
    Par défaut
    Citation Envoyé par Er3van Voir le message
    - Pour filtrer les caractères numériques (ou alphanumériques peut-importe), le mieux c'est de passer par des RegEx (expression régulières). Tu peux le faire avec des contrôles/extendeurs très facilement.
    Je suis tout à fait d'accord avec toi, je sais pas pourquoi j'ai pondu ce code là, saurais-tu comment peut-on annuler une saisie "proprement" ?
    A la place de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If (Not a.Contains(e.KeyChar)) Then
    Mettre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If(not (Regex.Match("[\d]",e.keyChar).Success) Then
    Citation Envoyé par Er3van Voir le message
    - Utiliser des méthodes héritées de VB (et donc non intégrées au framework .net) est déconseillé. C'est voué à disparaître.
    Il faut remplacer le VbCrLf par :
    Quelle différence entre + et & pour la concaténation ?

    @+
    Mat

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 7
    Par défaut
    NIIICKEL ! Merci beaucoup ! Tout celà marche merveilleusement bien
    Pour le coup de ma fonction avec le bouton "Block", voici le code final qui fonctionne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
            If (Val(ChampNum.Text) < 1) Then
                MsgBox("Veuillez entrer dans la zone de saisie numérique le nombre de blocs désirés avant de vouloir insérer cette fonction !")
            Else
                TextBox1.Text = TextBox1.Text.Substring(0, TextBox1.SelectionStart) + Chr(9) + "Nombre de Blocks (" + ChampNum.Text + ")" + TextBox1.Text.Substring(0, TextBox1.SelectionStart)
                For i As Short = 1 To Val(ChampNum.Text)
                    TextBox1.Text &= TextBox1.Text.Substring(0, TextBox1.SelectionStart) + Environment.NewLine + Chr(9) + "Block (" & i & ")" + Chr(13) & Chr(10) + TextBox1.Text.Substring(0, TextBox1.SelectionStart)
                Next
                ChampText.Clear()
                ChampNum.Clear()
            End If
    A savoir pour info qu'il ne connaissais pas de "end for" mais qu'il préférais un "Next" à la place. J'ignore pourquoi.

    Petite démo, lorsque je tape "5" dans mon ChampNum et que je clic sur "Block" j'obtiens dans ma textBox:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    	Nombre de Blocks (5)
    	Block (1)
     
    	Block (2)
     
    	Block (3)
     
    	Block (4)
     
    	Block (5)
    Perfecto ! Par contre, petit soucis ! Il semblerais que même lorsque mon ChampNum a subi une fonction ChampNum.Clear() , L'ordinateur garde en mémoire la valeur qui y a été tapé. Ainsi, lorsque j'utilise une seconde fois ma fonction block avec un autre valeur, il fait l'opération deux fois: avec l'ancienne valeur et la nouvelle. Est-ce normal? oO

    2) En ce qui concerne l'enregistrement du contenu de la textbox1 dans un fichier... Donc ce code là:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim sfd As New Windows.Forms.SaveFileDialog()
    If (sfd.ShowDialog() = Windows.Forms.DialogResult.OK) Then
        Dim sw As StreamWriter = My.Computer.FileSystem.OpenTextFileWriter(sfd.FileName, False)
        sw.WriteLine(TextBox1.Text)
        sw.Close()
    End If
    sfd.Dispose()
    Quelle est la fonction que je pourrais ajouter et qui permettra de définir le type de fichier que l'utilisateur enregistrera ? Dans mon cas, je souhaite du *.txt

    Merci encore pour votre aide et votre envie de partager

  8. #8
    Membre Expert Avatar de Er3van
    Homme Profil pro
    Architecte Logiciel
    Inscrit en
    Avril 2008
    Messages
    1 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte Logiciel
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2008
    Messages : 1 430
    Par défaut
    De mémoire, à vérifier donc, je crois que c'est comme ceci :

    Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
    sfd.Filter = "Text file (.txt)|.txt"

  9. #9
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2010
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2010
    Messages : 151
    Par défaut
    Citation Envoyé par Denis61400 Voir le message
    A savoir pour info qu'il ne connaissais pas de "end for" mais qu'il préférais un "Next" à la place. J'ignore pourquoi.
    C'est normal, c'est moi qui ai fait l'erreur, End For n'existe pas en VB.Net


    Citation Envoyé par Denis61400 Voir le message
    Perfecto ! Par contre, petit soucis ! Il semblerais que même lorsque mon ChampNum a subi une fonction ChampNum.Clear() , L'ordinateur garde en mémoire la valeur qui y a été tapé. Ainsi, lorsque j'utilise une seconde fois ma fonction block avec un autre valeur, il fait l'opération deux fois: avec l'ancienne valeur et la nouvelle. Est-ce normal? oO
    C'est en effet étrange, et si à la place de faire ChampNum.Clear(), tu fais ChampNum.Text = "", que se passe-t'il ? Peut être que clear ne fait que modifier l'affichage, mais je n'en suis pas sur du tout.

    Citation Envoyé par Denis61400 Voir le message
    Quelle est la fonction que je pourrais ajouter et qui permettra de définir le type de fichier que l'utilisateur enregistrera ? Dans mon cas, je souhaite du *.txt
    Tu rajoutes le filtre suivant pour limiter au fichiers Txt. (c'est l'exemple de la doc)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sfd.Filter = "Fichiers texte (*.txt)|*.txt
    Citation Envoyé par Documentation
    La chaîne de filtre doit contenir une description du filtre, suivie d'une barre verticale (|) et du modèle du filtre. Les chaînes pour les différentes options de filtre doivent également être séparées par la barre verticale. Exemple : "Fichiers texte (*.txt)|*.txt|Tous les fichiers (*.*)|*.*"

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 7
    Par défaut
    Merci Matt & Er3van

    Citation Envoyé par matll Voir le message
    C'est en effet étrange, et si à la place de faire ChampNum.Clear(), tu fais ChampNum.Text = "", que se passe-t'il ? Peut être que clear ne fait que modifier l'affichage, mais je n'en suis pas sur du tout.
    J'ai également essayé avec ChampNum.Text = "" et ça me fait la même D'après moi ca vient de l'algorithme:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
            If (Val(ChampNum.Text) < 1) Then
                MsgBox("Veuillez entrer dans la zone de saisie numérique le nombre de blocs désirés avant de vouloir insérer cette fonction !")
            Else
                TextBox1.Text = TextBox1.Text.Substring(0, TextBox1.SelectionStart) + Chr(9) + "Nombre de Blocks (" + ChampNum.Text + ")" + TextBox1.Text.Substring(0, TextBox1.SelectionStart)
                For i As Short = 1 To Val(ChampNum.Text)
                    TextBox1.Text &= TextBox1.Text.Substring(0, TextBox1.SelectionStart) + Environment.NewLine + Chr(9) + "Block (" & i & ")" + Chr(13) & Chr(10) + TextBox1.Text.Substring(0, TextBox1.SelectionStart)
                Next
                ChampText.Clear()
                ChampNum.Clear()
            End If
    Car j'ai essayé avec un code simple sur un autre bouton "SetValue" du type:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
            TextBox1.Text = TextBox1.Text.Substring(0, TextBox1.SelectionStart) + Chr(9) + "SetValue" + " (" + ChampNum.Text + ")" + Environment.NewLine + TextBox1.Text.Substring(TextBox1.SelectionStart)
            ChampNum.Clear()
    Et lorsque je retape une nouvelle valeur et que je reclic sur le bouton "SetValue" ca me met la nouvelle valeur entre () mais ca me fait pas la même erreur qu'avec ma fonction "Block"

Discussions similaires

  1. Réponses: 13
    Dernier message: 05/05/2007, 00h59
  2. [OPENGL] Première application avec Newton Engine
    Par Bakura dans le forum Contribuez
    Réponses: 24
    Dernier message: 11/11/2006, 13h46
  3. [hibernate][spring] première application
    Par iftolotfi dans le forum Hibernate
    Réponses: 2
    Dernier message: 01/06/2006, 07h03
  4. [Debutant(e)] Lancement de ma première application J2EE
    Par thomas_le_debutant dans le forum Java EE
    Réponses: 14
    Dernier message: 15/03/2006, 09h12
  5. [DEBUTANT]Première application avec XML
    Par mlallem dans le forum XML/XSL et SOAP
    Réponses: 6
    Dernier message: 17/11/2005, 15h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo