Ro3090
Messages postés17Date d'inscriptionlundi 15 mai 2006StatutMembreDernière intervention 6 décembre 2006
-
9 oct. 2006 à 10:47
Ro3090
Messages postés17Date d'inscriptionlundi 15 mai 2006StatutMembreDernière intervention 6 décembre 2006
-
11 oct. 2006 à 03:54
Bonjour,
Je cherche à rendre indépendant un bouton d'un winform. Je sais manipuler les boutons lorqu'ils sont implémentés dans mon winform. Je sais aussi customiser mon bouton via une classe dérivée, mais j'aimerais pouvoir manipuler mon bouton via une classe sans passer par un winform (même si je souhaite quand même garder un winform pour un menu classique).
J'ai trouvé dans les sources du site un code qui me semble pas très compliquait à mettre en oeuvre (http://www.csharpfr.com/codes/AJOUT-DYNAMIQUE-CONTROL-VOLEE_30850.aspx) et qui s'apparente à peu près à ce que je veux faire mais il est fait pour une picturebox et lorsque je l'adapte pour un bouton ça ne fonctionne pas. Mon problème vient de cette ligne : Form1.ActiveForm.Controls.Add(this.cmdSchool).
Mon compilo veut que je lui déclare une instance de Form1 pour que ça passe. Pourtant avec la picturebox ce n'était pas le cas?!?
J'ai une classe Bouton (elle remplace la classe star du code relatif au lien ci-dessus), une classe Form1 (pour mon formulaire), et une classe Main.
Le but de la manoeuvre quand j'aurais réussi à isoler le code de mon bouton c'est la création d'une méthode qui me permettra de générer des boutons dans lesquelles j'y mettrais des informations, en fonction d'une liste où chaque élément correspond à un bouton. Voilà où je veux me diriger.
Si vous avez une petite idée ou un conseil je suis preneur, je vous remercie d'avance
Ro
A voir également:
Bouton indépendant d'un winform pour une génération dynamique de boutons
cs_Bidou
Messages postés5487Date d'inscriptiondimanche 4 août 2002StatutMembreDernière intervention20 juin 201361 10 oct. 2006 à 08:23
Je trouve que ton problème n'est pas clair.
Tu peux faire une méthode ailleurs que dans ton Form qui créer des boutons, par exemple (rapidement fait) :
public List CreateButtons(int nb)
{
List btns = new List();
for(int i=0; i<nb; i++)
{
Button btn = new Button();
btn.Text = "...."
btn.Size = .....
// etc
btns.Add(btn)
}
return btns;
}
Et quand tu dois ajouter les boutons, tu fais :
myForm.Controls.Add(CreateButtons(4));
Ro3090
Messages postés17Date d'inscriptionlundi 15 mai 2006StatutMembreDernière intervention 6 décembre 2006 10 oct. 2006 à 14:08
Re
Merci pour m'avoir donné une réponse si rapide.
J'ai essayer de créer une classe listButton qui me permet de créer par la suite mes boutons en leur injectant des infos venant d'une liste d'objet ou chaque objet a une chaine de caractère. Je n'ai réussi qu'à afficher un seul bouton.
Du coup j'ai essayé ta méthode et je suis arrivé au même résultat. J'ai dû mettre les appels de mes fonctions et de mes méthodes dans InitializeComponent() de mon Form et j'ai eu du mal avec le "myForm.Controls.Add(CreateButtons(4));".
En fait pour moi ça donne ça:
public
static List
<DynButton
> CreateButtons(listTerms lf
){
btn
.Font
= new System
.Drawing
.Font("Arial", 12F, ((System
.Drawing
.FontStyle
)((System
.Drawing
.FontStyle
.Bold
| System
.Drawing
.FontStyle
.Underline
))), System
.Drawing
.GraphicsUnit
.Point
, ((System
.Byte
)(0)));
btn
.Size
= new System
.Drawing
.Size(112, 64);
btn
.Location
= new System
.Drawing
.Point(4*k
, 60*l
);
btn
.Click
+ = new System
.EventHandler(btn
.cmdBase_Click
);
btns
.Add(btn
);
k
= +20;
l
=+5;}
return btns
;}
et dans le Form je construis mes boutons successifs par:
for
( int i
=0; i
<btns
.Count
; i
++){
this
.Controls
.Add(this
.btns
[i
]);}
Je me suis aperçu dans les deux cas de mon erreur (pourquoi j'avais un seul bouton). J'avais placé les indices me permettant de changer de position dans ma boucle for en début. Du coup, la position était toujours la même!! arg!!!
Enfin, maintenant c'est tout bon. Il faut que je trouve trouve une solution plus élégante pour positionner mes boutons; ce qui me paraissait pas très facile est fait.
Ro3090
Messages postés17Date d'inscriptionlundi 15 mai 2006StatutMembreDernière intervention 6 décembre 2006 10 oct. 2006 à 03:49
Le problème c'est que je suis obligé de mettre toutes les fonctionnalités de mon bouton dans le code du form et c'est ce qui me gène. En plus de cela je ne peux pas déclarer mon bouton comme ça, car en fonction de ma liste en entrée je peux avoir un bouton comme je peux en avoir plusieurs.
Je vais essayer tout bêtement de créer une liste d'objet via les générics comme ça elle sera extensible en fonction de mes données en entrée, qui contient des boutons et je vais voir comment je peux me dépatouiller avec ça. Ca devrait marcher.
Merci quand même pour la réponse très rapide.
Je suis toujours preneur si quelqu'un a une idée lumineuse pour mon sujet et encore merci d'avance
Ro
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_Bidou
Messages postés5487Date d'inscriptiondimanche 4 août 2002StatutMembreDernière intervention20 juin 201361 10 oct. 2006 à 14:19
Euh oui, mais pourquoi tu crées une classe DynButton? Si c'est juste pour créer des boutons dynamiquement, ça ne sert à rien, tu peux utiliser la class Button
Ro3090
Messages postés17Date d'inscriptionlundi 15 mai 2006StatutMembreDernière intervention 6 décembre 2006 11 oct. 2006 à 03:54
Ma classe DynButton hérite d'une classe ButtonGen qui définit un bouton avec un design particulier: mes boutons sont ovales, changent de couleur au passage de la souris, ont une certaine transparence etc... c'est pour cette raison que je n'utilise pas la classe de base Button directement.
En passant, j'ai fait une erreur grossière dans le code ci-dessus. Il faut remplacer k=+20 et l=+5 qui sont en fin de ma boucle for par k=k+20 et l=l+5; sinom ça n'affiche que 2 boutons. Normal vu que le k et l ne sont pas bien incrémentés si on les laisse tels que je les avais donnés.