Nombre de textbox enabled = à la valeur d'un NumericUpDown [Résolu]

Messages postés
23
Date d'inscription
jeudi 7 octobre 2010
Dernière intervention
20 juillet 2012
- - Dernière réponse : Sehnsucht
Messages postés
107
Date d'inscription
samedi 25 novembre 2000
Dernière intervention
4 mai 2013
- 14 oct. 2010 à 01:32
Je ne savais pas trop quel genre de titre donner pour ca donc je vais essayer d'être plus clair ici.

Imaginez que sur mon formulaire j'ai 10 textbox différente qui on pour nom "note1, note2, note3...j'usqu'à note10".
Quand l'usager ouvre le formulaire, les textbox son visible mais toute "enabled = false".

Sur ce même formulaire j'ai un NumericUpDown qui a comme valeur, 10 au maximum et 1 au minimum. J'aimerais que à la
valeur de ce NumericUpDown, le même nombre de textbox devienne "enabled = true".

Exemple simple:

NumericUpDown = 4 donc
note1.enabled = true
note2.enabled = true
note3.enabled = true
note3.enabled = true


Je sais très bien que je pourrais faire le code avec le principe suivant

Select case NumericUpDown
case 1 
note1.enabled = true

Select case NumericUpDown
case 2 
note2.enabled = true

etc...

end select


Mais j'aimerais savoir si c'est possible de faire tout ca dans un loop " FOR, NEXT ". Ce serais beaucoup plus beau à voir
dans mon code! Donc maintenant que vous comprenez le principe de toute ca, il ne vous reste qu'a me donner un petit coup
de main! Merci!
Afficher la suite 

Votre réponse

4 réponses

Meilleure réponse
Messages postés
107
Date d'inscription
samedi 25 novembre 2000
Dernière intervention
4 mai 2013
3
Merci
Bonsoir,

Tu peux essayer ceci, je n'ai pas testé le code (je l'ai codé directement ici) il y a donc peut etre des petites erreurs mais là logique est là. Un petit détail tu dis que par défaut le NumericUpDown est à 1 mais que par défaut tous les TextBox sont désactivés c'est incohérent il devrait y en avoir un (normalement avec ce code le problème ne se posera pas, car le code sera exécuté au lancement du formulaire et "allumera" le nombre de TextBox correspondant à la valeur spécifiée par défaut au NumericUpDown)

' nudNotes est le nom du NumericUpDown
Private Sub nudNodes_ValueChanged(ByVal sender As Object, ByVal e As EventArgs) Handles nudNotes.ValueChanged
    'Note je pars du principe que tes TextBox sont sur le Form
    'S'ils sont par exemple dans un GroupBox, Panel ou autre conteneur
    'Il faudra changer Me (qui est optionnel en fait ici) par le nom du conteneur (qui dans ce cas sera obligatoire)
    For i As Integer = 1 To nudNotes.Value
        Me.Controls("note" & i.ToString).Enabled = True
    Next
    For i As Integer = nudNotes.Value + 1 To 10
        Me.Controls("note" & i.ToString).Enabled = False
    Next

   'Note si tu préfère n'avoir qu'une seule boucle, il faut faire comme ceci
   'Mais sache qu'un test dans une boucle est moins rapide que deux boucles
   'Enfin sur 10 éléments seulement c'est pas aussi sûr lol
   For i As Integer = 1 To 10
       Me.Controls("note" & i.ToString).Enabled = (i <= nudNotes.Value)
   Next
End Sub


Cordialement !

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 121 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Sehnsucht
Messages postés
23
Date d'inscription
jeudi 7 octobre 2010
Dernière intervention
20 juillet 2012
0
Merci
Je me suis tromper dans la partit du code de mon example du select case. Voici ce que je voulais dire.

Select case NumericUpDown.value

case 1 
note1.enabled = true

case 2 
note1.enabled = true
note2.enabled = true

case 3
note1.enabled = true
note2.enabled = true
note3.enabled = true

et ainsi de suite

end select
Commenter la réponse de CDEProgrammeur
Messages postés
23
Date d'inscription
jeudi 7 octobre 2010
Dernière intervention
20 juillet 2012
0
Merci
Pour cette parti ci-dessous, tout fonctionne à merveille

For i As Integer = 1 To nudNotes.Value
Me.Controls("note" & i.ToString).Enabled = True
Next


Mais le seul problème c'est lorsque je veut en enlever. Bref, je voudrais que les textbox sois "enabled" celon
la valeur du NumericUpDown.(Toujours égale) Donc si je décide d'en enlever il tombe false et cette partit ne
fonctionnais pas avec le code ci-dessous.

For i As Integer = nudNotes.Value + 1 To 10
Me.Controls("note" & i.ToString).Enabled = False
Next


Merci pour ton aide!
Commenter la réponse de CDEProgrammeur
Messages postés
107
Date d'inscription
samedi 25 novembre 2000
Dernière intervention
4 mai 2013
0
Merci
J'avoue ne pas bien comprendre ton message.

Au cas où j'ai fais l'essai, et j'obtiens bien ce que je pensais (après j'ai peut-être mal compris le problème initial) avec les deux versions proposées il a fallu que j'arrange un peu (une conversion et un flag lors de la création du formulaire) le code véritable que j'ai est celui-ci:

Public Class Form1

    ' Utilisé pour bloquer les modifications le temps que le formulaire et ses contrôles soient créés
    Private isInitializing As Boolean = True

    Sub New()
        InitializeComponent()
        isInitializing = False
    End Sub

    Private Sub nudNotes_ValueChanged(ByVal sender As Object, ByVal e As EventArgs) Handles nudNotes.ValueChanged
        If isInitializing Then Exit Sub

        For i As Integer = 1 To Convert.ToInt32(nudNotes.Value)
            Me.Controls("TextBox" & i.ToString).Enabled = True
        Next
        For i As Integer = Convert.ToInt32(nudNotes.Value) + 1 To 10
            Me.Controls("TextBox" & i.ToString).Enabled = False
        Next

       'For i As Integer = 1 To 10
       '    Me.Controls("note" & i.ToString).Enabled = (i <= nudNotes.Value)
       'Next

    End Sub
End Class


Au cas où je met le résultat visuel (j'ai ouvert 10 formulaires pour montrer les 10 cas)


Désolé si j'ai compris de travers ^^

Cordialement !
Commenter la réponse de Sehnsucht

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.