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 :

[VB.NET] problème variables dans les textbox


Sujet :

Windows Forms

  1. #1
    Futur Membre du Club
    Inscrit en
    Octobre 2006
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 11
    Points : 5
    Points
    5
    Par défaut [VB.NET] problème variables dans les textbox
    Bonjour,

    Etant en train d'essayer de réaliser un jeu, je dispose de 100 "cases" (10x10) textbox. Désirant rentrer les valeurs saisies par l'utilisateur dans une matrice 10x10, je suis obligé de faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    if txt11.text <> "" then
    matrice[1,1]= txt11.text
    end if
     
    if txt21.text <> "" then
    matrice[2,1]= txt21.text
    end if
     
    if txt31.text <> "" then
    matrice[3,1]= txt31.text
    end if
    Et cela 100 fois de 1-1 à 10-10.

    Existe-il une manière d'optimiser le programme avec par exemple une boucle for ? Si oui, comment puis-je l'utiliser ? En effet, je n'arrive pas à "mettre" des variables dans la propriété text des textbox...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    For x = 1 to 10
       For y = 1 To 10
          if txt??.text <> "" then
             matrice[x,x]= txt??.text
          end if
       Next x
    Next y
    Merci d'avance pour votre aide,

    P. PElERIN

  2. #2
    En attente de confirmation mail
    Inscrit en
    Août 2006
    Messages
    550
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Août 2006
    Messages : 550
    Points : 669
    Points
    669
    Par défaut
    Bonjour,

    A ma Connaissance, ce n'est pas possible.

    Par contre, tu peux créer ton propre tableau à 2 dimensions et y affecter les réferences de tes controls

    ex:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Dim monTableau(10,10) As TextBox
     
    MonTableau(1,1) = txt11
    MonTableau(1,2) = txt12
    MonTableau(1,3) = txt13
    MonTableau(1,4) = txt14
    MonTableau(1,5) = txt15
    ...

    Ensuite, tu n'as plus qu'à itérer sur ce tableau.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Août 2002
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 168
    Points : 123
    Points
    123
    Par défaut
    Pourquoi ne pas créer tes controles dynamiquement ?

    For x = 1 to 10
    For y = 1 To 10
    dim txt as new TextBox
    me.controls.add(txt)
    txt.left = calcul pour l'emplacement horizontal
    txt.top = calcul pour l'emplacement vertical
    txt.size = new size( 40, 30 )
    txt.text = ta_valeur
    Next x
    Next y

    En esperant t'aider...

  4. #4
    Futur Membre du Club
    Inscrit en
    Octobre 2006
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    Bonjour,

    Alexandre : Les controles sont déjà créés, moi en fait je voudrais non pas afficher des textes mais lire ceux entrés par l'utilisateur et les mettre dans un tableau...

    Kelpan :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MonTableau(1,1) = txt11.text
    c'est une bonne idée mais je pense que ça ne marchera pas si certaines cases (textbox) sont vides, donc ça revient à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if txt11.text <> "" then
    matrice[1,1]= txt11.text
    end if
    Merci quand meme d'avoir essayé de m'aider ;-)

    Si quelqu'un a une autre idée, je suis preneur, sinon je vais garder ma méthode (ça ne me dérange pas de taper les 100 instuctions [copier-coller] mais je trouve seulement que ça ne fait pas un "beau" code...)

    Merci à tous,

    Pierre PELERIN.

  5. #5
    En attente de confirmation mail
    Inscrit en
    Août 2006
    Messages
    550
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Août 2006
    Messages : 550
    Points : 669
    Points
    669
    Par défaut
    Citation Envoyé par pierrepelerin

    Kelpan :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MonTableau(1,1) = txt11.text
    c'est une bonne idée mais je pense que ça ne marchera pas si certaines cases (textbox) sont vides, donc ça revient à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if txt11.text <> "" then
    matrice[1,1]= txt11.text
    end if
    Merci quand meme d'avoir essayé de m'aider ;-)
    Euh non ! pas vraiment

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    For i = 1 to 10
        For j = 1 to 10
            If MonTableau(i,j).Text <> "" Then
                matrice(1,1) = MonTableau(i,j).Text
            End if
        Next j
    Next i
    est différent de ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    if txt11.text <> "" then
        matrice[1,1]= txt11.text
    end if
    if txt21.text <> "" then
        matrice[2,1]= txt21.text
    end if
    if txt31.text <> "" then
        matrice[3,1]= txt31.text
    end if
    ...

  6. #6
    Futur Membre du Club
    Inscrit en
    Octobre 2006
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    Oui mais le problème est que je souhaite récupérer les chiffres entrés de textbox ; dans ton exemple tu pars d'un tableau, est-il possible de "transformer" un ensemble de textbox en tableau ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    For i = 1 to 10
        For j = 1 to 10
            If MonTableau(i,j).Text <> "" Then
                matrice(1,1) = MonTableau(i,j).Text
            End if
        Next j
    Next i
    Pierre PELERIN

  7. #7
    En attente de confirmation mail
    Inscrit en
    Août 2006
    Messages
    550
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Août 2006
    Messages : 550
    Points : 669
    Points
    669
    Par défaut
    Apparement tu lis en diagonal !!

    Le tableau est un ensemble de TextBox !

    Je répète le principe ...

    Tu déclares un tableau à 2 dimensions de type TextBox dans ton formulaire.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim MonTableau(10,10) as TextBox
    Dans ton constructeur, tu affectes les références de chaque TextBox dans ton tableau.

    Ex pour txt11 (Colonne 1, Ligne 1) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MonTableau(1,1) = txt11
    et ainsi de suite pour tous tes controls TextBox

    Ensuite tu peux récupérer les controls TextBox via le tableau.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    For i = 1 to 10
        For j = 1 to 10
            If MonTableau(i,j).Text <> "" Then
                matrice(1,1) = MonTableau(i,j).Text
            End if
        Next j
    Next i

    Si ça t'ennuie de remplir manuellement ton tableau dans le constructeur, tu peux toujours créer un algorythme pour charger le tableau en fonction du nom du TextBox

    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
     
    Public Sub New()
        MyBase.New()
        'Cet appel est requis par le Concepteur Windows Form.
     
        InitializeComponent()
     
        'Ajoutez une initialisation quelconque après l'appel InitializeComponent()
        CreerTableauTextBox(Me)
    End Sub
     
    '*** Algorythme de création du tableau de TextBox
    Private Sub CreerTableauTextBox(ByVal ObjCtrlParent As System.windows.forms.Control)
        Dim objCtrl As System.Windows.Forms.Control
        Dim Str_Name As String
        Dim Int_Col As Integer
        Dim Int_Lig As Integer
     
        ' Si c'est un container
        If ObjCtrlParent.Controls.Count > 0 Then
            ' Pour tous les controls enfants
            For Each objCtrl In ObjCtrlParent.Controls
                CreerTableauTextBox(objCtrl)
            Next
        End If
     
        ' Si le composant est un TextBox
        If TypeOf ObjCtrlParent Is System.Windows.Forms.TextBox Then
            ' Récupération du nom du control
            Str_Name = ObjCtrlParent.Name
            ' Le nom ne contient que 5 caractères
            If Str_Name.Length <> 5 Then Exit Sub
            ' Le nom commence par txt
            If Not Str_Name.Substring(0, 3).ToUpper = "TXT" Then Exit Sub
            ' Le 4eme caractère doit être numérique
            If Not Char.IsDigit(Str_Name.Substring(3, 1)) Then Exit Sub
            ' Le 5eme caractère doit être numérique
            If Not Char.IsDigit(Str_Name.Substring(4, 1)) Then Exit Sub
            ' Récupération de la colonne et de la ligne
            Int_Col = CInt(Str_Name.Substring(3, 1))
            Int_Lig = CInt(Str_Name.Substring(4, 1))
            ' Insertion du textBox dans le tableau
            MonTableau(Int_Col, Int_Lig) = ObjCtrlParent
        End If
    End Sub
    ou autre solution, comme l'a suggéré très justement Alexandre, tu peux créer tes TextBox dynamiquement et les affecter au tableau directement.

    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
     
    '*** Algorythme de création du tableau de TextBox
    Private Sub CreerTableauTextBox()
        Dim Int_Col As Integer
        Dim Int_Lig As Integer
        Dim objTextBox As System.Windows.Forms.TextBox
     
        For Int_Col = 1 To 10
            For Int_Lig = 1 To 10
                ' Nouvelle instance TextBox
                objTextBox = New System.Windows.Forms.TextBox
     
                ' On affecte le control au conteneur
                '(Ex si le conteneur est un panel (MonPanel.Controls.add        (objTextBox))
                ' Si c'est le formulaire qui est directement le conteneur (Me.Controls.Add(objTextBox)
                ' Dans cet exemple, on suppose que c'est le formulaire le conteneur des controls TextBox
                Me.Controls.Add(objTextBox)
     
                With objTextBox
                    .Name = "txt" & Int_Col.ToString & Int_Lig.ToString ' Pas obligatoire
                    .Top = CalculerTopTextBox(Int_Lig)
                    .Left = CalculerLeftTextBox(Int_Col)
                    '.Size = new system.Drawing.Size(x,y) ' A toi de le définir
                    '... définitions des autres propriétés qui te semblent utile
                    .Visible = True
                End With
     
                ' Ajout de la référence créée au Tableau
                MonTableau(Int_Col, Int_Lig) = objTextBox
            Next
        Next
    End Sub


    Si avec ça tu ne t'en sors pas, je crois qu'on ne pourra plus grand chose pur toi !


Discussions similaires

  1. [PowerShell] Problème de variable dans les fonctions. (windows forms)
    Par gretch dans le forum Scripts/Batch
    Réponses: 5
    Dernier message: 20/08/2014, 16h02
  2. Problème d'affichage dans les textbox
    Par popinenhbourg dans le forum Servlets/JSP
    Réponses: 8
    Dernier message: 28/02/2006, 13h09
  3. Problème d'affichage dans les textbox
    Par popinenhbourg dans le forum Balisage (X)HTML et validation W3C
    Réponses: 7
    Dernier message: 28/02/2006, 12h36
  4. [EasyPHP] problème de visibilité des variable dans les includes
    Par d1g-2-d1g dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 4
    Dernier message: 23/10/2005, 02h55
  5. [VB.NET] [Débutant] Probléme de variable dans les requettes
    Par Silvia12 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 07/03/2005, 14h13

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