Un button dans une boucle ("Button" & i)

Résolu
MASTERVINCE Messages postés 33 Date d'inscription jeudi 21 août 2003 Statut Membre Dernière intervention 20 février 2010 - 20 janv. 2010 à 13:45
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 - 20 janv. 2010 à 22:49
Bonjour à tous,
J'ai fouillé un peu partout sur le forum mais je n'ai trouvé la solution que pour du VB.NET :(

Voila j'ai crée une boucle à l'interieure de cette boucle j'ai un bouton arf je vous affiche le code plutot qu'un long discourt ^^.

Public Sub lectureparam()

        acces = ".\lumiere.ini"         'Nom du fichier Ini 

        Dim istat As Integer
        Dim y As Integer = 1
        Try

            For i = 1 To 9
                y = y + 1
                rubrique = "Configuration Bouton Lumiere" 'Nom de la rubrique  
                variableIni = "TextBox" & i
                Valvariable = Space(255)
                istat = Get_Private_Profile_String(rubrique, variableIni, "", Valvariable, acces)
                If Valvariable <> "" Then _
                (Me.Controls("Button" & y), System.Windows.Forms.Button).Text = Valvariable 

            Next

        Catch ex As Exception

        End Try

J'ai un soucis avec le ("bouton" & y), en fait je souhaite qu'il comprene Button1.text

Merci pour votre aide ;)


Bidouiller n'est pas un crime ^^

14 réponses

PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
20 janv. 2010 à 16:49
.... c'est incroyable çà quand même !!!

bon :
c'est des BUTTON
donc dans le ini, change les clés "exemple"

çà donne


[Configuration Bouton Lumiere]
Button1=Valeur1
Button2=Valeur2
Button3=Valeur3
Button4=Valeur4
Button5=Valeur5
Button6=Valeur6
Button7=Valeur7
Button8=Valeur8
Button9=Valeur9


ensuite l'exemple donné par Renfield est de 1 à 8
tu veux de 2 à 9 donc tu changes
et du coup évidemment la 2e ligne est "i.tostring" (et plus i+1)

        Dim sBuffer As New System.Text.StringBuilder(500)
        For i As Integer = 2 To 9
            GetPrivateProfileString("Configuration Bouton Lumiere", "Button" & i.ToString(), "", sBuffer, sBuffer.Capacity, ".\lumiere.ini")
            CType(Me.Controls("Button" & i.ToString), System.Windows.Forms.Button).Text = sBuffer.ToString()
        Next


c'est pas une question d'évidence pour l'un ou l'autre mais juste de ne pas copier "bêtement"

faut quand même comprendre ce qu'on fait non?
3
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
20 janv. 2010 à 14:29
mais je n'ai trouvé la solution que pour du VB.NET :(


vu que ton code est en .Net, je ne vois pas où est le soucis...

Renfield - Admin CodeS-SourceS - MVP Visual Basic
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
20 janv. 2010 à 14:31
NB: vu que tu fais

Dim y As Integer = 1
et au départ de ta boucle :

y = y + 1

y ne vaudra jamais '1' quand tu accèderas à Me.Controls ...

Renfield - Admin CodeS-SourceS - MVP Visual Basic
0
MASTERVINCE Messages postés 33 Date d'inscription jeudi 21 août 2003 Statut Membre Dernière intervention 20 février 2010 1
20 janv. 2010 à 14:48
Oups pardon oui en effet mais bouton se nomme:
Button2, Button3, Button4,,,, Button9 ( le dernier ^^ )
C'est pour cela que je souhaite faire une boucle, afin d'eviter de recopier le code pour chacun des bouton...


Bidouiller n'est pas un crime ^^
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
20 janv. 2010 à 15:08
Imports System.Text

Public Class Form1

    Private Declare Auto Function GetPrivateProfileString Lib "kernel32.dll" (ByVal lpApplicationName As String, ByVal lpKeyName As String, ByVal lpDefault As String, ByVal lpReturnedString As StringBuilder, ByVal nSize As Integer, ByVal lpFileName As String) As Integer

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim sBuffer As New StringBuilder(500)
        For i As Integer = 1 To 8
            GetPrivateProfileString("Configuration Bouton Lumiere", "TextBox" & i.ToString(), "", sBuffer, sBuffer.Capacity, ".\lumiere.ini")
            CType(Me.Controls("Button" & (i + 1).ToString()), System.Windows.Forms.Button).Text = sBuffer.ToString()
        Next
    End Sub
End Class



Renfield - Admin CodeS-SourceS - MVP Visual Basic
0
MASTERVINCE Messages postés 33 Date d'inscription jeudi 21 août 2003 Statut Membre Dernière intervention 20 février 2010 1
20 janv. 2010 à 16:07
Merci pour ta reponse mais cela me retourne une erreur : La référence d'objet n'est pas définie à une instance d'un objet.



Bidouiller n'est pas un crime ^^
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
20 janv. 2010 à 16:11
moi ça fonctionne bien...

a quelle ligne as tu cette erreur ?

sur ma form, j'avais 9 boutons :

Button1 à Button9

et mon ini :
[Configuration Bouton Lumiere]
TextBox1=Valeur1
TextBox2=Valeur2
TextBox3=Valeur3
TextBox4=Valeur4
TextBox5=Valeur5
TextBox6=Valeur6
TextBox7=Valeur7
TextBox8=Valeur8
TextBox9=Valeur9



Renfield - Admin CodeS-SourceS - MVP Visual Basic
0
MASTERVINCE Messages postés 33 Date d'inscription jeudi 21 août 2003 Statut Membre Dernière intervention 20 février 2010 1
20 janv. 2010 à 16:19
Je crois que je me suis mal exprimé...
ALors je vais te donner toutes les infos (bougre de moi ! )
Voila j'ai une fomr1 avec un split pannel dedans.
Dans le pannel1 j'ai une serie de bouton.
Dans le pannel2 j'ai differentes formes qui affichent differentes données.
L'une de ces Form me permet de selectionner des options, que je mémorise dans un fichier.ini.
Lorsque que je ferme la Form ou j'ai sauvegarder les options.
La form1, verifie dans le fichier.ini si il y a des valeurs.
Dans le cas ou les valeurs sont presentent, alors elle affiche le bouton correspondant et recupere dans le fichier.ini le nom du bouton.

L'erreur se trouve sur la ligne:
CType(Me.Controls("Button" & (i + 1).ToString()), System.Windows.Forms.Button).Text = sBuffer.ToString()

Je débute et il est fort probable que la faute vienne de moi ...


Bidouiller n'est pas un crime ^^
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
20 janv. 2010 à 16:30
salut,

panel -> il devient donc le conteneur

même code en remplaçant me.controls par tonpanel.controls


(tu réveillais les vieux threads et la réponse te convenait, mais tu as préféré re-poser la question plutôt que de comprendre la réponse? drôle de choix...)

++
[hr]
0
MASTERVINCE Messages postés 33 Date d'inscription jeudi 21 août 2003 Statut Membre Dernière intervention 20 février 2010 1
20 janv. 2010 à 16:41
Merci d'avoir essayer de m'aider.
Mais je dois avouer que j'ai beaucoup de mal a essayer de comprendre ce qui vous semble evident a vous.

Je vais opter pour la solution bourin des repetition de code ^^.Et continuer à lire les tuto ... Y a du boulot !

Désolé de vous avoir fait perdre votre temps.
Merci

Vince

Bidouiller n'est pas un crime ^^
0
MASTERVINCE Messages postés 33 Date d'inscription jeudi 21 août 2003 Statut Membre Dernière intervention 20 février 2010 1
20 janv. 2010 à 16:49
De retour Arf je pouvez pas essayyer autre alors j'ai ouvert un autre projet dans lequel j'ai glissé ton code.
Et là ! Ba ca marche !

Vais voir cet histoire de panel maintenant car tu me dis "tonpanel"
Je l'ai donc remplacé par panel1 mais a premiere vue il ne le reconnait pas ..;


Bidouiller n'est pas un crime ^^
0
MASTERVINCE Messages postés 33 Date d'inscription jeudi 21 août 2003 Statut Membre Dernière intervention 20 février 2010 1
20 janv. 2010 à 16:54
Oki MERCI A VOUS DEUX !
EUREKA ! aprés avoir fait travailler ce qu'il me rest ede tête voici la ligne qui fonctionne :
CType(SplitContainer1.Panel1.Controls("Button" & (i + 1).ToString()), System.Windows.Forms.Button).Text = sBuffer.ToString()

Impect merci encore ;)

Vince

Bidouiller n'est pas un crime ^^
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
20 janv. 2010 à 16:56
CType(Panel1.Controls("Butto....

marche bien, testé à l'instant
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
20 janv. 2010 à 22:49
yep, j'avais décalé la chose, pour semble t'il coller a l'énoncé


Renfield - Admin CodeS-SourceS - MVP Visual Basic
0
Rejoignez-nous