11 votes

À quoi sert la propriété .NET Control.Margin ?

J'ai supposé que la propriété margin en C# avait la même signification qu'en CSS - l'espacement autour de l'extérieur du contrôle. Mais les valeurs de marge semblent être ignorées, quelles que soient les valeurs que je saisis.

J'ai ensuite lu le SDK :

La définition de la propriété Margin sur un contrôle n'a aucun effet sur la distance distance du contrôle par rapport aux bords de son conteneur.

Étant donné que je place des contrôles sur des formulaires, et que je les accroche éventuellement, que m'apporte la propriété Margin ?

9voto

OwenP Points 11164

Comme Philip Rieck l'a dit, la propriété margin n'est respectée que par les contrôles de conteneur qui effectuent la mise en page. Voici un exemple qui montre assez clairement comment la propriété TableLayoutPanel respecte la propriété Margin :

using System.Drawing;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();

            TableLayoutPanel pnl = new TableLayoutPanel();
            pnl.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 50));
            pnl.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 50));
            pnl.Dock = DockStyle.Fill;
            this.Controls.Add(pnl);

            Button btn1 = new Button();
            btn1.Text = "No margin";
            btn1.Dock = DockStyle.Fill;

            Button btn2 = new Button();
            btn2.Margin = new Padding(25);
            btn2.Text = "Margin";
            btn2.Dock = DockStyle.Fill;

            pnl.Controls.Add(btn1, 0, 0);
            pnl.Controls.Add(btn2, 1, 0);
        }
    }
}

Je crois que les seuls contrôles intégrés à .NET 2.0 qui respectent cette propriété sont les suivants FlowLayoutPanel y TableLayoutPanel Il est à espérer que les composants tiers le respectent également. Cela n'a pratiquement aucun effet dans d'autres scénarios.

5voto

Philip Rieck Points 21405

La propriété margin est utilisée par le moteur de mise en page que votre hôte de contrôle (Panel, par exemple) utilise, de la manière que ce moteur de mise en page juge appropriée. Cependant, il est préférable de l'utiliser pour l'espacement, comme vous le supposez. Il vous suffit de lire la documentation de ce moteur de mise en page spécifique.

Elle peut s'avérer très pratique lors de l'utilisation d'un FlowLayoutPanel ou d'un TableLayoutPanel, par exemple, pour réduire le rembourrage par défaut ou espacer un peu les choses. Bien entendu, si vous écrivez un fournisseur de mise en page personnalisé, vous pouvez utiliser Margin comme bon vous semble.

0voto

Pavel K Points 937

La propriété Control.Margin peut également être utile au moment de la conception si vous n'utilisez pas de conteneur de mise en page, mais placez les contrôles manuellement.

Il affecte la distance entre les commandes déplacées manuellement, à laquelle des lignes d'arrêt apparaissent .

Par exemple, pour une valeur de marge par défaut de 3 pour une zone de texte, vous obtiendrez les lignes suivantes :

enter image description here

Et pour une marge de 10 - ceux-ci (l'étiquette a une marge de 3 dans les deux cas) :

enter image description here

Ainsi, si vous avez des directives strictes pour votre interface utilisateur, il vous suffit de définir les marges comme vous le souhaitez et de faire glisser les contrôles vers les lignes d'accrochage.

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