Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Ajouter contrôles dynamiquement

15 réponses
Avatar
Olivier57b
Salut,

je voudrais ajouter des contrôles (label,listbox) dynamiquement, mais je
voudrais les créer dans une procédure; le problème c'est qu'alors ces
contrôles ne sont accessibles que dans la procédure précédente.Comment faire
pour qu'ils soient accessibles partout (et notamment dans le module Form1, où
VS placera les procédures associées aux événements)?

Merci, Olivier57b.

10 réponses

1 2
Avatar
Megaten
Voici un exemple pour un usercontrol c'est pareil avec n'importe quel control
et toutes les sub de la Form peuvent y acceder!!!

Dim usergrid As New ClassLibrary1.UserGrid()

MaForm.Controls.Add(usergrid)

Olivier57b a écrit :
Salut,

je voudrais ajouter des contrôles (label,listbox) dynamiquement, mais je
voudrais les créer dans une procédure; le problème c'est qu'alors ces
contrôles ne sont accessibles que dans la procédure précédente.Comment faire
pour qu'ils soient accessibles partout (et notamment dans le module Form1, où
VS placera les procédures associées aux événements)?

Merci, Olivier57b.


Avatar
Olivier57b
Merci pour ta réponse; cependant, je n'y arrive toujours pas.J'ai entré dans
une procédure: dim lbl1 as new classlibrary1.label(), mais VS ne semble pas
connaître classlibrary1.C'est une instance, mais de quoi? Je précise que je
débute en .NET.
Peux-tu préciser ta réponse?

Merci d'avance, Olivier57b.
Avatar
Megaten
Effectivement il s'agit d'un exemple
1-il faut importer la class à instancier ( ClassLibrary1 dans l'exemple)
2- creer l'objet
3- l'ajouter dans l'objet souhaité

Voici un autre exemple plus causant de l'ajout dynamique d'une checkbox
et de son initialisation avant d'etre ajouté sur la Form

Je pense même que par defaut 1- est inutile dans ce type de cas, à vérifier

Ps: Je n'ai pas beaucoup d'avance sur toi pour .Net et j'ai déjà subit
les meme affres


Public Class Form1
Inherits System.Windows.Forms.Form'(1)

.....

Private Sub Form1_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
Dim MyCheckBox As New NewCheckBox() '(2)
'Position the new CheckBox
With MyCheckBox
.Text = "Custom Colored Check Box"
.Left = OldCheckBox.Left + 25
.Top = OldCheckBox.Top + OldCheckBox.Height + 50
.Size = OldCheckBox.Size
End With
Controls.Add(MyCheckBox) '(3)
End Sub

Olivier57b a écrit :
Merci pour ta réponse; cependant, je n'y arrive toujours pas.J'ai entré dans
une procédure: dim lbl1 as new classlibrary1.label(), mais VS ne semble pas
connaître classlibrary1.C'est une instance, mais de quoi? Je précise que je
débute en .NET.
Peux-tu préciser ta réponse?

Merci d'avance, Olivier57b.




Avatar
Olivier57b
Merci pour votre réponse.
Mais j'ai un autre problème, lié au premier: si j'ai besoin de créer des
contrôles dynamiquement, c'est car je ne sais pas combien j'en aurai à
créer.J'ai essayé de déclarer un tableau de labels, mais :
1: dim Tab() as label marche mais le compilateur me dit qu'il manque un new
pour pouvoir utiliser Tab(i)
2: dim Tab() as new label() ne marche pas car je n'ai pas le droit
d'utiliser new avec un tableau (j'ai essayé avec une collection, il se
produit la même erreur)

Avez-vous une réponse?

"Megaten" wrote:

Effectivement il s'agit d'un exemple
1-il faut importer la class à instancier ( ClassLibrary1 dans l'exemple)
2- creer l'objet
3- l'ajouter dans l'objet souhaité

Voici un autre exemple plus causant de l'ajout dynamique d'une checkbox
et de son initialisation avant d'etre ajouté sur la Form

Je pense même que par defaut 1- est inutile dans ce type de cas, à vérifier

Ps: Je n'ai pas beaucoup d'avance sur toi pour .Net et j'ai déjà subit
les meme affres


Public Class Form1
Inherits System.Windows.Forms.Form'(1)

......

Private Sub Form1_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
Dim MyCheckBox As New NewCheckBox() '(2)
'Position the new CheckBox
With MyCheckBox
.Text = "Custom Colored Check Box"
.Left = OldCheckBox.Left + 25
.Top = OldCheckBox.Top + OldCheckBox.Height + 50
.Size = OldCheckBox.Size
End With
Controls.Add(MyCheckBox) '(3)
End Sub

Olivier57b a écrit :
> Merci pour ta réponse; cependant, je n'y arrive toujours pas.J'ai entré dans
> une procédure: dim lbl1 as new classlibrary1.label(), mais VS ne semble pas
> connaître classlibrary1.C'est une instance, mais de quoi? Je précise que je
> débute en .NET.
> Peux-tu préciser ta réponse?
>
> Merci d'avance, Olivier57b.
>
>



Avatar
Megaten
En .net on ne peut pas créer des tableaux de controles comme en VB6, il te faut
contourner le probleme
J'ai donné 2 methodes dans le thread 'Groupe de control' (un peu plus bas dans le forum)
mais je crains que cela ne te soit pas vraiment utile car il te faut connaitre le nombre
de controle


Olivier57b a écrit :
Merci pour votre réponse.
Mais j'ai un autre problème, lié au premier: si j'ai besoin de créer des
contrôles dynamiquement, c'est car je ne sais pas combien j'en aurai à
créer.J'ai essayé de déclarer un tableau de labels, mais :
1: dim Tab() as label marche mais le compilateur me dit qu'il manque un new
pour pouvoir utiliser Tab(i)
2: dim Tab() as new label() ne marche pas car je n'ai pas le droit
d'utiliser new avec un tableau (j'ai essayé avec une collection, il se
produit la même erreur)

Avez-vous une réponse?

"Megaten" wrote:

Effectivement il s'agit d'un exemple
1-il faut importer la class à instancier ( ClassLibrary1 dans l'exemple)
2- creer l'objet
3- l'ajouter dans l'objet souhaité

Voici un autre exemple plus causant de l'ajout dynamique d'une checkbox
et de son initialisation avant d'etre ajouté sur la Form

Je pense même que par defaut 1- est inutile dans ce type de cas, à vérifier

Ps: Je n'ai pas beaucoup d'avance sur toi pour .Net et j'ai déjà subit
les meme affres


Public Class Form1
Inherits System.Windows.Forms.Form'(1)

......

Private Sub Form1_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
Dim MyCheckBox As New NewCheckBox() '(2)
'Position the new CheckBox
With MyCheckBox
.Text = "Custom Colored Check Box"
.Left = OldCheckBox.Left + 25
.Top = OldCheckBox.Top + OldCheckBox.Height + 50
.Size = OldCheckBox.Size
End With
Controls.Add(MyCheckBox) '(3)
End Sub

Olivier57b a écrit :
Merci pour ta réponse; cependant, je n'y arrive toujours pas.J'ai entré dans
une procédure: dim lbl1 as new classlibrary1.label(), mais VS ne semble pas
connaître classlibrary1.C'est une instance, mais de quoi? Je précise que je
débute en .NET.
Peux-tu préciser ta réponse?

Merci d'avance, Olivier57b.








Avatar
Olivier57b
Megaten,

Je pense que cela peut me servir, je déclarerai un nombre maximal de
contrôles.Mais j'ai regardé dans l'ancien thread, vous parliez d'un exemple
joint à votre réponse, mais je n'ai rien trouvé.Pouvez-vous me le faire
parvenir?

Cordialement, Olivier57b.

"Megaten" wrote:

En .net on ne peut pas créer des tableaux de controles comme en VB6, il te faut
contourner le probleme
J'ai donné 2 methodes dans le thread 'Groupe de control' (un peu plus bas dans le forum)
mais je crains que cela ne te soit pas vraiment utile car il te faut connaitre le nombre
de controle


Olivier57b a écrit :
> Merci pour votre réponse.
> Mais j'ai un autre problème, lié au premier: si j'ai besoin de créer des
> contrôles dynamiquement, c'est car je ne sais pas combien j'en aurai à
> créer.J'ai essayé de déclarer un tableau de labels, mais :
> 1: dim Tab() as label marche mais le compilateur me dit qu'il manque un new
> pour pouvoir utiliser Tab(i)
> 2: dim Tab() as new label() ne marche pas car je n'ai pas le droit
> d'utiliser new avec un tableau (j'ai essayé avec une collection, il se
> produit la même erreur)
>
> Avez-vous une réponse?
>
> "Megaten" wrote:
>
>> Effectivement il s'agit d'un exemple
>> 1-il faut importer la class à instancier ( ClassLibrary1 dans l'exemple)
>> 2- creer l'objet
>> 3- l'ajouter dans l'objet souhaité
>>
>> Voici un autre exemple plus causant de l'ajout dynamique d'une checkbox
>> et de son initialisation avant d'etre ajouté sur la Form
>>
>> Je pense même que par defaut 1- est inutile dans ce type de cas, à vérifier
>>
>> Ps: Je n'ai pas beaucoup d'avance sur toi pour .Net et j'ai déjà subit
>> les meme affres
>>
>>
>> Public Class Form1
>> Inherits System.Windows.Forms.Form'(1)
>>
>> ......
>>
>> Private Sub Form1_Load(ByVal sender As System.Object, _
>> ByVal e As System.EventArgs) Handles MyBase.Load
>> Dim MyCheckBox As New NewCheckBox() '(2)
>> 'Position the new CheckBox
>> With MyCheckBox
>> .Text = "Custom Colored Check Box"
>> .Left = OldCheckBox.Left + 25
>> .Top = OldCheckBox.Top + OldCheckBox.Height + 50
>> .Size = OldCheckBox.Size
>> End With
>> Controls.Add(MyCheckBox) '(3)
>> End Sub
>>
>> Olivier57b a écrit :
>>> Merci pour ta réponse; cependant, je n'y arrive toujours pas.J'ai entré dans
>>> une procédure: dim lbl1 as new classlibrary1.label(), mais VS ne semble pas
>>> connaître classlibrary1.C'est une instance, mais de quoi? Je précise que je
>>> débute en .NET.
>>> Peux-tu préciser ta réponse?
>>>
>>> Merci d'avance, Olivier57b.
>>>
>>>



Avatar
Olivier57b
Megaten (ou quiconque a la solution)

Je croyais avoir réussi mais j'obtiens quelque chose de bizarre: j'ai crée
un panel et ensuite, dans une boucle: panel1.Controls.Add(new label).Et cela
ne marche pas: le premier contrôle est bien crée mais lors du second passage,
la propriété count du panel (de panel.controls en fait) ne passe pas à 2.Help!

Merci de votre aide, Olivier57b

"Megaten" wrote:

En .net on ne peut pas créer des tableaux de controles comme en VB6, il te faut
contourner le probleme
J'ai donné 2 methodes dans le thread 'Groupe de control' (un peu plus bas dans le forum)
mais je crains que cela ne te soit pas vraiment utile car il te faut connaitre le nombre
de controle


Olivier57b a écrit :
> Merci pour votre réponse.
> Mais j'ai un autre problème, lié au premier: si j'ai besoin de créer des
> contrôles dynamiquement, c'est car je ne sais pas combien j'en aurai à
> créer.J'ai essayé de déclarer un tableau de labels, mais :
> 1: dim Tab() as label marche mais le compilateur me dit qu'il manque un new
> pour pouvoir utiliser Tab(i)
> 2: dim Tab() as new label() ne marche pas car je n'ai pas le droit
> d'utiliser new avec un tableau (j'ai essayé avec une collection, il se
> produit la même erreur)
>
> Avez-vous une réponse?
>
> "Megaten" wrote:
>
>> Effectivement il s'agit d'un exemple
>> 1-il faut importer la class à instancier ( ClassLibrary1 dans l'exemple)
>> 2- creer l'objet
>> 3- l'ajouter dans l'objet souhaité
>>
>> Voici un autre exemple plus causant de l'ajout dynamique d'une checkbox
>> et de son initialisation avant d'etre ajouté sur la Form
>>
>> Je pense même que par defaut 1- est inutile dans ce type de cas, à vérifier
>>
>> Ps: Je n'ai pas beaucoup d'avance sur toi pour .Net et j'ai déjà subit
>> les meme affres
>>
>>
>> Public Class Form1
>> Inherits System.Windows.Forms.Form'(1)
>>
>> ......
>>
>> Private Sub Form1_Load(ByVal sender As System.Object, _
>> ByVal e As System.EventArgs) Handles MyBase.Load
>> Dim MyCheckBox As New NewCheckBox() '(2)
>> 'Position the new CheckBox
>> With MyCheckBox
>> .Text = "Custom Colored Check Box"
>> .Left = OldCheckBox.Left + 25
>> .Top = OldCheckBox.Top + OldCheckBox.Height + 50
>> .Size = OldCheckBox.Size
>> End With
>> Controls.Add(MyCheckBox) '(3)
>> End Sub
>>
>> Olivier57b a écrit :
>>> Merci pour ta réponse; cependant, je n'y arrive toujours pas.J'ai entré dans
>>> une procédure: dim lbl1 as new classlibrary1.label(), mais VS ne semble pas
>>> connaître classlibrary1.C'est une instance, mais de quoi? Je précise que je
>>> débute en .NET.
>>> Peux-tu préciser ta réponse?
>>>
>>> Merci d'avance, Olivier57b.
>>>
>>>



Avatar
Megaten
Il vaudrait mieux le code de ta boucle pour t'aider

Olivier57b a écrit :
Megaten (ou quiconque a la solution)

Je croyais avoir réussi mais j'obtiens quelque chose de bizarre: j'ai crée
un panel et ensuite, dans une boucle: panel1.Controls.Add(new label).Et cela
ne marche pas: le premier contrôle est bien crée mais lors du second passage,
la propriété count du panel (de panel.controls en fait) ne passe pas à 2.Help!

Merci de votre aide, Olivier57b

"Megaten" wrote:

En .net on ne peut pas créer des tableaux de controles comme en VB6, il te faut
contourner le probleme
J'ai donné 2 methodes dans le thread 'Groupe de control' (un peu plus bas dans le forum)
mais je crains que cela ne te soit pas vraiment utile car il te faut connaitre le nombre
de controle


Olivier57b a écrit :
Merci pour votre réponse.
Mais j'ai un autre problème, lié au premier: si j'ai besoin de créer des
contrôles dynamiquement, c'est car je ne sais pas combien j'en aurai à
créer.J'ai essayé de déclarer un tableau de labels, mais :
1: dim Tab() as label marche mais le compilateur me dit qu'il manque un new
pour pouvoir utiliser Tab(i)
2: dim Tab() as new label() ne marche pas car je n'ai pas le droit
d'utiliser new avec un tableau (j'ai essayé avec une collection, il se
produit la même erreur)

Avez-vous une réponse?

"Megaten" wrote:

Effectivement il s'agit d'un exemple
1-il faut importer la class à instancier ( ClassLibrary1 dans l'exemple)
2- creer l'objet
3- l'ajouter dans l'objet souhaité

Voici un autre exemple plus causant de l'ajout dynamique d'une checkbox
et de son initialisation avant d'etre ajouté sur la Form

Je pense même que par defaut 1- est inutile dans ce type de cas, à vérifier

Ps: Je n'ai pas beaucoup d'avance sur toi pour .Net et j'ai déjà subit
les meme affres


Public Class Form1
Inherits System.Windows.Forms.Form'(1)

......

Private Sub Form1_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
Dim MyCheckBox As New NewCheckBox() '(2)
'Position the new CheckBox
With MyCheckBox
.Text = "Custom Colored Check Box"
.Left = OldCheckBox.Left + 25
.Top = OldCheckBox.Top + OldCheckBox.Height + 50
.Size = OldCheckBox.Size
End With
Controls.Add(MyCheckBox) '(3)
End Sub

Olivier57b a écrit :
Merci pour ta réponse; cependant, je n'y arrive toujours pas.J'ai entré dans
une procédure: dim lbl1 as new classlibrary1.label(), mais VS ne semble pas
connaître classlibrary1.C'est une instance, mais de quoi? Je précise que je
débute en .NET.
Peux-tu préciser ta réponse?

Merci d'avance, Olivier57b.












Avatar
Megaten
Mon envoi a été rejeté...
Mais il est bien present dans le forum en piece jointe bien que cela ne soit pas
tres en ligne avec les regles des forums....

Olivier57b a écrit :
Megaten,

Je pense que cela peut me servir, je déclarerai un nombre maximal de
contrôles.Mais j'ai regardé dans l'ancien thread, vous parliez d'un exemple
joint à votre réponse, mais je n'ai rien trouvé.Pouvez-vous me le faire
parvenir?

Cordialement, Olivier57b.

"Megaten" wrote:

En .net on ne peut pas créer des tableaux de controles comme en VB6, il te faut
contourner le probleme
J'ai donné 2 methodes dans le thread 'Groupe de control' (un peu plus bas dans le forum)
mais je crains que cela ne te soit pas vraiment utile car il te faut connaitre le nombre
de controle


Olivier57b a écrit :
Merci pour votre réponse.
Mais j'ai un autre problème, lié au premier: si j'ai besoin de créer des
contrôles dynamiquement, c'est car je ne sais pas combien j'en aurai à
créer.J'ai essayé de déclarer un tableau de labels, mais :
1: dim Tab() as label marche mais le compilateur me dit qu'il manque un new
pour pouvoir utiliser Tab(i)
2: dim Tab() as new label() ne marche pas car je n'ai pas le droit
d'utiliser new avec un tableau (j'ai essayé avec une collection, il se
produit la même erreur)

Avez-vous une réponse?

"Megaten" wrote:

Effectivement il s'agit d'un exemple
1-il faut importer la class à instancier ( ClassLibrary1 dans l'exemple)
2- creer l'objet
3- l'ajouter dans l'objet souhaité

Voici un autre exemple plus causant de l'ajout dynamique d'une checkbox
et de son initialisation avant d'etre ajouté sur la Form

Je pense même que par defaut 1- est inutile dans ce type de cas, à vérifier

Ps: Je n'ai pas beaucoup d'avance sur toi pour .Net et j'ai déjà subit
les meme affres


Public Class Form1
Inherits System.Windows.Forms.Form'(1)

......

Private Sub Form1_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
Dim MyCheckBox As New NewCheckBox() '(2)
'Position the new CheckBox
With MyCheckBox
.Text = "Custom Colored Check Box"
.Left = OldCheckBox.Left + 25
.Top = OldCheckBox.Top + OldCheckBox.Height + 50
.Size = OldCheckBox.Size
End With
Controls.Add(MyCheckBox) '(3)
End Sub

Olivier57b a écrit :
Merci pour ta réponse; cependant, je n'y arrive toujours pas.J'ai entré dans
une procédure: dim lbl1 as new classlibrary1.label(), mais VS ne semble pas
connaître classlibrary1.C'est une instance, mais de quoi? Je précise que je
débute en .NET.
Peux-tu préciser ta réponse?

Merci d'avance, Olivier57b.












Avatar
Olivier57b
Voilà le code:

L'idée, c'est d'afficher un nombre variable de labels(et aussi, ailleurs,
des textbox) dans cette procédure, en fonction de CatPar qui est la chaîne à
afficher, et de CatCNbPar qui est l'indice de la chaîne, et qui sert à
désigner l'endroit où afficher le label.Je pense que VB bloque car tous les
labels qui sont crées sont les mêmes: il n'a plus le moyen de les
indentifier.Mais retournons au code:

Sub AfficheCatC(ByVal CatCPar As String, ByVal CatCNbPAr As Integer)

pnlCat.Controls.Add(New Label)


Dim ptSupG As New Point(68 + 232 * (CatCNbPAr - 1), 182)
' NB : ne pas oublier le -1
' Il faut aussi redimensionner le formulaire
pnlCat.Controls.Item(CatCNbPAr - 1).Location = ptSupG
Dim FonteFam1 As New FontFamily("Prime Minister of Canada")
Dim Police1 As New Font(FonteFam1, 20, FontStyle.Regular,
GraphicsUnit.Pixel)
pnlCat.Controls.Item(CatCNbPAr - 1).Font = Police1
pnlCat.Controls.Item(CatCNbPAr - 1).Text = CatCPar
Controls.Add(pnlCat.Controls.Item(CatCNbPAr - 1))


End Sub

Merci pour votre aide, Olivier57b.
1 2