Partage
  • Partager sur Facebook
  • Partager sur Twitter

C# changer la position d'un composant

    2 mars 2011 à 15:15:03

    Voilà j'ai une form1 est je voudrais afficher dedans:
    Une page de démarrage.
    Après un clic sur continuer je passe à une page intermédiaire.
    Après avoir remplit d'autre infos je passe à une page finale.
    Ces trois "pages" doivent être dans la même form! Je ne souhaite pas ouvrir une nouvelle form pour chaque pages.
    J'ai donc pensé utiliser plusieurs panels (si il y a une meilleure solution je suis preneur) que je mettrais à la taille de la form pour simuler chacune des pages.
    Mais voilà là une erreur bizarre est venue.

    Sur un label par exemple, je peux modifier son text et sa visibilité mais pas sa position, ceci est le cas pour tout les autres composant...
    Une des propriétés de mes composant l'empêche peut-être.
    public partial class Form1 : Form
    {
    public void pagesuiv()
    {
    devineLabel.Text = "coucou!!";
    devinelabel.Visible=false;
    }
    ...
    Ça ca Marche

    public partial class Form1 : Form
    {
    public void pagesuiv()
    {
    devineLabel.Location.x = 0;
    devineLabel.Location.y = 0;
    Donne:
    Erreur 1 'System.Drawing.Point.x' est inaccessible en raison de son niveau de protection
    Erreur 2 'System.Drawing.Point.y' est inaccessible en raison de son niveau de protection

    Je ne vois pas ce qui cause cette protection...

    J'ai de bonne connaissance en C et en Java, je suis obligé de faire mon projet en C#.net mais j'ai du mal à m'y adapter...
    • Partager sur Facebook
    • Partager sur Twitter
      2 mars 2011 à 15:37:58

      Deux problèmes dans ton code:

      - La propriété X (ou Y) d'un point s'appelle "X", pas "x". Une propriété commence d'ailleurs toujours par une majuscule. Ici il se trouve (un peu par hasard) qu'un point possède aussi une variable privée "x", qui n'est pas accessible (car privée). Le compilateur comprend donc que tu essaies de modifier la valeur d'une variable privée et t'envoie balader.

      - Un objet "Point" (comme celui renvoyé par la propriété Location de ton composant) est une structure et pas une classe. Il se comporte donc comme un type de base et est ainsi toujours transmis/renvoyé par valeur et pas par référence. Cela signifie en pratique que le Point renvoyé par devineLabel.Location n'est pas "la" position du label, mais une copie de sa position. Changer la valeur des propriétés X et Y de cette copie n'aurait donc pas d'effet sur la position du label.
      Pour modifier la position d'un composant, il faut modifier directement la valeur de sa propriété Location en lui assignant un nouvel objet Point:

      devineLabel.Location = new Point(0, 0);
      

      N'hésite pas à consulter la doc quand tu rencontres des problèmes de ce genre. Un simple appui sur la touche F1 après avoir sélectionné "Location" t'aurait envoyé sur la documentation de cette propriété, qui reprend mon explication avec plus de détails et un exemple. :)
      • Partager sur Facebook
      • Partager sur Twitter
        2 mars 2011 à 15:53:03

        Je prend note,
        merci! ^^
        • Partager sur Facebook
        • Partager sur Twitter

        C# changer la position d'un composant

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown