8 votes

La propriété Anchor en C# ne semble pas fonctionner

J'ai ajouté quelques contrôles à mon formulaire et modifié la propriété d'Anchor comme je m'y attendais, mais lorsque je redimensionne le formulaire au moment de l'exécution, les contrôles restent à la même place.

Par exemple, j'ai deux boutons dans le coin inférieur droit d'un formulaire - ils sont sur le formulaire, sans conteneur ni rien de tel. Anchor = Bottom, Right. FormBorderStyle = Sizable. Mais lorsque je redimensionne le formulaire en cours d'exécution, les boutons ne se déplacent pas.

Est-ce que j'ai manqué quelque chose ?

c# 2005

0voto

Starceaker Points 57

J'ai eu exactement le même problème.

Situation :

TableLayoutPanel avec une ligne définie comme autosize . Dans cette ligne, l'ancrage Droit, Bas ne fonctionne pas. En supprimant les autoSize et le mettre à une hauteur fixe a résolu le problème, comme prescrit par l'utilisateur428955.

0voto

jonathana Points 2647

Mon problème était très simple,
toutes les propriétés d'ancrage de mes contrôles étaient correctement définies et contenues dans un panneau.
mais j'ai oublié de définir les styles d'ancrage du panneau conteneur, ce qui fait que le panneau conteneur ne s'étend pas en fonction des bords du formulaire comme je le voulais... après avoir défini la propriété d'ancrage du panneau conteneur, tout a fonctionné comme prévu.

0voto

Si votre formulaire est localisable, vérifiez si vous avez effectué des changements d'ancrage/d'ancrage dans une autre langue.

0voto

Jack Points 460

J'ai également eu un problème similaire. J'ai découvert que c'était parce que je redimensionnais mon formulaire lors du form_load. Cela peut être contourné en plaçant temporairement le docking en haut/à gauche pendant le redimensionnement du formulaire.

    private void ResizeFromDesigntimeToRunTime()
    {
        var volatileControls = this.Controls.Cast<Control>().Where(control => (control.Anchor | AnchorStyles.Bottom | AnchorStyles.Right) != AnchorStyles.None).ToList();

        var anchorPairing = volatileControls.ToDictionary(control => control, control => control.Anchor);

        foreach (var control in volatileControls)
            control.Anchor = AnchorStyles.Left | AnchorStyles.Top; //Temporarily reset all controls with an anchor including right or bottom, so that these aren't automatically resized when we adjust form dimensions.

        this.Height = SomeHeight;
        this.Width = SomeWidth;

        foreach (var pair in anchorPairing)
            pair.Key.Anchor = pair.Value;
    }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X