Problème de position avec des controls

Ro3034 Messages postés 4 Date d'inscription lundi 8 mars 2004 Statut Membre Dernière intervention 29 janvier 2007 - 26 déc. 2006 à 03:34
Ro3034 Messages postés 4 Date d'inscription lundi 8 mars 2004 Statut Membre Dernière intervention 29 janvier 2007 - 29 janv. 2007 à 07:50
 Bonjour,

Mon application  ajoute des boutons sur un Winforms sous cette forme:
                         but1   but2    but3
                                   but0
                         but4   but5     but6

but0 est le bouton central de mon appli et quand je clique dessus il ne se passe rien. Par contre si je clique sur les autres boutons je vais remplacer le contenu de but0 par celui du bouton cliqué (but1 par exemple). Pour faire ça, je change la location de mes boutons avec un btns[n].Location = new System.Drawing.Point(X,Y) par ex en ayant défini juste avant X et Y.

Mais si mon appli marche très bien en plein écran, dès que je réduit ou bouge ma fenêtre rien nen va plus.
Je pense que ça vient du fait que mes boutons ne sont pas bien ajoutés à une zone cliente et donc que la location de mes boutons est référencée par rapport aux coordonnées de l'écran. Du coup j'ai essayé d'y remédier. J'ai ajouté une zone cliente de la taille de mon écran et à chaque fois que j'utilise la location de mes boutons j'ai ajouté derrière un PointToClient.
Seulement, ça ne marche toujours pas.

C'est sans doutes tout bête mais si vous avez une idée je suis preneur. Je pense être dans le bon avec mon histoire de référenciel mais je n'utilise peut-être pas la bonne fonction au bon endroit.

Merci d'avance

3 réponses

sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
26 déc. 2006 à 10:26
Bonjour,

je ne suis pas sur que la solution que tu essayes de mettre en place soit la bonne.

Moi, je ferais ainsi :

Les boutons but1 à but6 sont tous reliés au même handler (butX_Click). Dans cet évènement, tu modifies les propriétés de but0 en rapport avec le bouton précédement cliquer.

ex:

protected void butX_Click(object sender, EventArgs e) {
   Button b = sender as Button;

   if ( b == null ) return;

   this.Tag = b.Name; // Très important ca !

   switch (b.Name) {
      case "but1":
         this.but0.Text = "bla bla...";
         ... traitement ...
         break;
   }
}

dans dans l'évènement click du bouton but0 :

protected void but0_Click(object sender, EventArgs e) {
   Button b = sender as Button;

   if ( b == null ) return;

   switch ( (string)b.Tag ) {
      case "but1" :
         // si c'est le bouton but1... on fait...
         break;
   }
}

voila... à toi d'adapter !

Sébastien FERRAND (blog)
Consultant Indépendant
[Microsoft Visual C# MVP]
0
Ro3034 Messages postés 4 Date d'inscription lundi 8 mars 2004 Statut Membre Dernière intervention 29 janvier 2007
27 déc. 2006 à 05:57
En fait, je n'ai qu'un type de bouton et donc qu'un seul handler. De
plus, je génére mes boutons en fontion d'une matrice que je


  1                 2                   change à loisir. Donc, je n'ai pas tout le temps le même nombre de bouton.


 but 1          but 2                _Le bouton central a le rk à 0 et
un index de 0. Quand je clique sur un des boutons extérieurs je modifie



 rk 0           rk 0                 une liste de boutons où j'ai
(but0,but1,but2,but3,but4), qui devient si je clique sur but1       
         


                                           (but1,but0,but2,but3,but4).
J'insère but1 en première position (insert), j'enlève l'ancien but1    
           


          0                              (removeAt) et je décale les indexs.


         but 0                          Seulement, pour que l'affichage
de mes boutons soit mise à jour en fonction de ma liste de bouton je
n'ai


         rk 1                            rien trouvé d'autre que de les
changer de location. Mais comme je l'explique plus haut, si je bouge ma



                                           fenêtre ou que je la dimensionne mon programme ne fonctionne plus correctement.


3                     4


but 3              but 4             Merci quand même pour la réponse. Je vais chercher un peu plus.


 rk 2                rk 2
0
Ro3034 Messages postés 4 Date d'inscription lundi 8 mars 2004 Statut Membre Dernière intervention 29 janvier 2007
29 janv. 2007 à 07:50
J'ai adopté une autre solution. J'ai une liste d'objet qui correspond à mes boutons (btns), je l'associe à la liste Controls (liste des controls par défaut). Quand je veux ajouter des boutons je les ajoute aux deux listes l'une après l'autre en ayant vider ma liste Controls au préalable.

 this.Controls.Clear();
 btns.Clear();

//modif de ma liste btns etc....

for (int n = 0; n < btns.Count; n++)
{
    this.Controls.Add(btns[n]);
  }

Au lieu de faire un  new btns[i].Location, je fais désormais :
btns[i].Left = X;
btns[i].Top = Y;

Malheureusement, j'ai toujours le même problème. Quand je réduis ma fenêtre, que je la déplace, ou si je fais glisser une fenêtre au dessus, mon programme va mal fonctionner pour un petit moment.
Au premier clic sur un de mes boutons, au lieu d'avoir le fonctionnement normal ça fait n'importe quoi. Au deuxième clic, on reprend un fonctionnement normal.
0
Rejoignez-nous