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

Windows Forms Discussion :

[textbox] Intervertir le texte entre 2 textbox


Sujet :

Windows Forms

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 60
    Par défaut [textbox] Intervertir le texte entre 2 textbox
    Bonjour,

    Je souhaiterais échanger le texte de 2 textbox, simplement en cliquant sur un bouton. Je l'ai fait en passant par une variable, mais n'y aurait-il pas une solution plus simple? (je dois appliquer ce principe à plusieurs textbox)

    Pour l'instant j'ai fait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim text1 as String = textbox1.text
    textbox1.text = textbox2.text
    textbox2.text = text1
    Merci

  2. #2
    Membre Expert Avatar de LaChips
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    1 109
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 109
    Par défaut
    Bonjour,
    Tu peux faire une fonction pour cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Private sub Intervertir(S1 as String, S2 as String)
      Dim tmp as String = S1
      S1 = S2
      S2 = tmp
    End sub

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 60
    Par défaut
    Merci pour cette solution, mais ça ne fonctionne pas complètement.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private sub Intervertir(S1 as String, S2 as String)
      Dim tmp as String = S1
      S1 = S2
      S2 = tmp
    End sub
     
    Private Sub Button10_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button10.Click
    Intervertir (textbox1.text, textbox2.text)
    End Sub
    Je pars avec:
    textbox1.text = "NOM"
    textbox2.text = "PRENOM"

    En cliquant sur mon bouton, les valeurs sont bien interverties:
    S1 = "PRENOM"
    S2 = "NOM"

    mais le résultat n'est pas appliqué aux textbox, je récupère:
    textbox1.text = "NOM"
    textbox2.text = "PRENOM"

    et non pas:
    textbox1.text = "PRENOM"
    textbox2.text = "NOM"

    Comment renvoyer le résultat de la fonction Intervertir à mes textbox ??

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    374
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 374
    Par défaut
    bonjour,
    Ajoute ByRef
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private sub Intervertir(ByRef S1 as String, ByRef S2 as String)
      Dim tmp as String = S1
      S1 = S2
      S2 = tmp
    End sub
     
    Private Sub Button10_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button10.Click
    Intervertir (textbox1.text, textbox2.text)
    End Sub
    Bon boulot Jean

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 60
    Par défaut
    tout simplement !!!

    Merci LaChips et JPelli pour l'aide

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 60
    Par défaut complications...!
    bonjour,
    je dois modifier un peu le fonctionnement de ma fonction.
    j'ai maintenant une dizaine de textbox et je dois pouvoir intervertir le text de 2 textbox au choix de la maniere suivante:
    - MAJ + clic sur la textbox 1
    - la textbox 1 devient verte
    - MAJ + clic sur la textbox 2
    - le text est interverti et la textbox 1 redevient blanche

    J'ai bien un fonction Intervertir avec mes variables TB1 et TB2 mais comment faire pour que
    TB1= la textbox sur laquelle je clique en premier
    TB2= la textbox sur laquelle je clique en deuxieme
    ?

    Quelle est la methode pour déterminer le control sur lequel on vient de cliquer?

    Merci d'avance

  7. #7
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Par défaut
    Tu gardes deux références vers des textbox (en attributs du formulaire). Lors des clics, tu affectes ces textbox à ces références. Une fois que tu as détecté un nombre pair de clic, tu passes ces deux références à ta méthode de swap.

    EDIT : Correction
    Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.

    Bonnes pratiques pour les accès aux données
    Débogage efficace en .NET
    LINQ to Objects : l'envers du décor

    Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 60
    Par défaut
    Lors des clics, tu affectes ces références à ces références.
    pourrais-tu développer un peu stp?
    je suis plutot débutant donc je ne vois pas comment faire ça!

    Merci

  9. #9
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Par défaut
    J'ai édité mon post précédent, il y avait effectivement une incohérence.
    Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.

    Bonnes pratiques pour les accès aux données
    Débogage efficace en .NET
    LINQ to Objects : l'envers du décor

    Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 60
    Par défaut
    Tu gardes deux références vers des textbox (en attributs du formulaire). Lors des clics, tu affectes ces textbox à ces références.
    je ne sais malheureusement pas comment faire ça !
    Pourrais-tu m'éclairer un peu stp ?

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 60
    Par défaut
    je comprends bien le principe mais je ne vois pas comment coder ça

  12. #12
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Dans le code source de ta Form, tu déclares 2 variables TextBox, et une variable qui indique dans quel état tu es (attente du 1er clic / attente du 2eme clic):
    Code VB : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Class Form1
    ...
    Private tb1 As TextBox
    Private tb2 As TextBox
    Private state As Integer = 1
    ...
    End Class
    Dans le code des évènements clic sur les textbox, tu assignes le controle à tb1 ou tb2 selon l'état actuel (state = 1 ou 2). Si c'est le 2eme clic, tu intervertis les valeurs:
    Code VB : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
        Private Sub TextBox1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.Click
            If state = 1 Then
                tb1 = sender
                tb1.BackColor = Color.Green
                state = 2
            Else
                tb2 = sender
                Intervertir(tb1.Text, tb2.Text)
                tb1.BackColor = Color.White
                state = 1
            End If
        End Sub

  13. #13
    Membre Expert
    Avatar de olsimare
    Inscrit en
    Décembre 2006
    Messages
    1 184
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 184
    Par défaut
    Bonjour.

    Tu peux aussi utiliser une collection de texbox interdépendants via une classe qui gére le switch en s'abonnant aux events click de chaque tb de la collection.

    En une ligne dans la form, tu inscris ton tb dans ce "gestionnaire de switch" et ça me semble plus propre.
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
     
    Public Class Form2
     
        Private tbsw As New TextBoxSwitchWorker
     
        Public Sub New()
     
            ' Cet appel est requis par le Concepteur Windows Form.
            InitializeComponent()
     
            ' Ajoutez une initialisation quelconque après l'appel InitializeComponent().
            tbsw.Add(Me.TextBox1)
            tbsw.Add(Me.TextBox2)
            tbsw.Add(Me.TextBox3)
            tbsw.Add(Me.TextBox4)
     
        End Sub
     
    End Class
     
    Public Class TextBoxSwitchWorker
        Inherits Hashtable
     
        Private currentIndex As Integer
     
        Public Overloads Sub Add(ByVal t As TextBox)
            MyBase.Add(t, False)
            AddHandler t.Click, AddressOf EvaluateSwitch
        End Sub
        Public Overloads Sub Remove(ByVal t As TextBox)
            RemoveHandler t.Click, AddressOf EvaluateSwitch
            MyBase.Remove(t)
        End Sub
        Private Sub EvaluateSwitch(ByVal sender As Object, ByVal e As EventArgs)
            Dim tb As TextBox = CType(sender, TextBox)
            ' C'est le textbox déja clické, on désactive
     
            If Me(tb) Then
                tb.BackColor = Color.White
                Me(tb) = False
                Exit Sub
            End If
     
            ' Le textbox n'est pas celui sélectionné --> on switch
            ' si l'un des textbox est déjà clické
            For Each temptb As TextBox In Me.Keys
                If Me(temptb) Then
                    temptb.BackColor = Color.White
                    Me(temptb) = False
                    Dim strText As String = tb.Text
                    tb.Text = temptb.Text
                    temptb.Text = strText
                    Exit Sub
                End If
            Next
            ' sinon on positionne le top clické
            Me(tb) = True
            tb.BackColor = Color.Green
     
        End Sub
     
    End Class
    Cdt.

  14. #14
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    C'est vrai, pourquoi faire simple quand on peut faire compliqué
    C'est une solution "élégante", mais c'est un peu utiliser un bulldozer pour écraser une mouche non ?

  15. #15
    Membre Expert
    Avatar de olsimare
    Inscrit en
    Décembre 2006
    Messages
    1 184
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 184
    Par défaut
    Bonjour.

    Citation Envoyé par tomlev Voir le message
    C'est vrai, pourquoi faire simple quand on peut faire compliqué
    C'est une solution "élégante", mais c'est un peu utiliser un bulldozer pour écraser une mouche non ?
    T'es dur là ! C'est pas super simple mais pas trop compliqué non plus...

    C'est simplement pour éviter de dupliquer n fois les lignes sur l'event pour les n boutons.

    C'est vrai que si c'est pour 2 boutons ... ça sert moyen !

    Cdt.

  16. #16
    Membre Expert
    Avatar de Aspic
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    3 905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 3 905
    Par défaut
    Ce problème n'est toujours pas résolu !! ?

    Bon c'est quoi le nouveau soucis ?
    Qui ne tente rien n'a rien !
    Ce qui ne nous tue pas nous rends plus fort !!
    Mon projet ZELDA en C++/Allegro
    http://www.tutoworld.com - Le Forum -
    Mes ressources Dotnet (cours, sources, tutos)
    --------------------------------------------
    + + =

    Ne pas oublier le Tag !

  17. #17
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par olsimare Voir le message
    Bonjour.


    T'es dur là ! C'est pas super simple mais pas trop compliqué non plus...

    C'est simplement pour éviter de dupliquer n fois les lignes sur l'event pour les n boutons.

    C'est vrai que si c'est pour 2 boutons ... ça sert moyen !

    Cdt.
    C'est juste que c'est marrant de voir qu'on est passé d'un code de 3 lignes qui faisait quelque chose de très simple (voir 1er post) à un code de 60 lignes

    D'ailleurs, si le but est de ne pas dupliquer le handler n fois, c'est inutile... il n'y a déjà pas besoin de le dupliquer ! On peut utiliser le même handler pour l'évènement click de tous les textbox concernés, c'est d'ailleurs pour ça que j'ai écrit "sender" plutôt que "TextBox1", pour que ça marche sur tous les textbox. D'ailleurs on peut même l'utiliser pour des textbox créés dynamiquement

  18. #18
    Membre Expert
    Avatar de olsimare
    Inscrit en
    Décembre 2006
    Messages
    1 184
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 184
    Par défaut
    Bonjour.

    Citation Envoyé par tomlev Voir le message
    D'ailleurs, si le but est de ne pas dupliquer le handler n fois, c'est inutile... il n'y a déjà pas besoin de le dupliquer ! On peut utiliser le même handler pour l'évènement click de tous les textbox concernés, c'est d'ailleurs pour ça que j'ai écrit "sender" plutôt que "TextBox1", pour que ça marche sur tous les textbox. D'ailleurs on peut même l'utiliser pour des textbox créés dynamiquement
    TOUCHé ! Je m'incline...

    Soit dit en passant, y'a vraiment plus que nous que ça interesse ...

    Cdt.

  19. #19
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par olsimare Voir le message
    Soit dit en passant, y'a vraiment plus que nous que ça interesse ...
    c'est clair... en fait je crois que SaumonAgile a fait peur à jontleman avec ses histoires de références
    Reviens jontleman, on est pas méchants

  20. #20
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 60
    Par défaut come back
    I'm back !
    Désolé mais j'ai eu des petits problèmes de santé, j'ai pas trop pu suivre la discussion.
    Je viens de voir tous vos posts. Si j'ai bien compris le concept, il faut que j'essaye la solution de tomlev, ou éventuellement le bulldozer de olsimar (si toute fois j'arrive à comprendre !!!)

    Je vous tiens au jus

Discussions similaires

  1. [VB.NET] Sélection de texte dans un textbox
    Par olbi dans le forum Windows Forms
    Réponses: 5
    Dernier message: 25/08/2014, 10h26
  2. [VB6]Centré Texte d'une Textbox Verticalement
    Par bb62 dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 07/02/2006, 16h59
  3. valider le contenu d'un textbox par la touche entrée
    Par camilla dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 07/10/2005, 15h02
  4. [VB.Net] Bloqué le texte d'un textbox
    Par x dans le forum Windows Forms
    Réponses: 4
    Dernier message: 28/07/2005, 14h38
  5. [VB.NET] Probleme d'affichage entre ListBox/TextBox
    Par Monster77 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 03/08/2004, 11h02

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