Domanda

Supponevo che la proprietà margin di C# avesse un significato come nei CSS: la spaziatura attorno all'esterno del controllo.Ma i valori del margine sembrano essere ignorati indipendentemente dai valori che inserisco.

Poi ho letto sull'SDK:

L'impostazione della proprietà del margine su un controllo ancorata non ha alcun effetto sulla distanza del controllo dai bordi del suo contenitore.

Dato che sto posizionando i controlli sui moduli e magari agganciandoli, cosa mi ottiene la proprietà Margin?

È stato utile?

Soluzione

La proprietà margin viene utilizzata da qualsiasi motore di layout utilizzato dall'host di controllo (Panel, ad esempio), nel modo ritenuto opportuno dal motore di layout.Tuttavia, è meglio utilizzarlo per la spaziatura proprio come presumi.Basta leggere la documentazione per quello specifico motore di layout.

Può essere molto utile quando si utilizza FlowLayoutPanel o TableLayoutPanel, ad esempio, per ridurre il riempimento predefinito o per distanziare un po' gli elementi.Ovviamente, se scrivi un provider di layout personalizzato, puoi utilizzare Margin come ritieni opportuno.

Altri suggerimenti

Come ha detto Philip Rieck, la proprietà margin è rispettata solo dai controlli contenitore che eseguono il layout.Ecco un esempio che rende abbastanza chiaro come TableLayoutPanel rispetta la proprietà 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);
        }
    }
}

Credo che gli unici controlli integrati di .NET 2.0 che rispettino questa proprietà siano FlowLayoutPanel E TableLayoutPanel;si spera che anche i componenti di terze parti lo rispettino.Praticamente non ha alcun effetto in altri scenari.

La proprietà Control.Margin potrebbe essere utile anche in fase di progettazione se non si utilizza il contenitore di layout, ma si posizionano piuttosto i controlli manualmente.

Influisce sulla distanza tra i controlli trascinati manualmente vengono visualizzate le linee di snap.

Per esempio.per un valore di margine predefinito pari a 3 per la casella di testo avresti queste linee di allineamento:

enter image description here

E per il margine di 10 - questi (l'etichetta ha un margine di 3 in entrambi i casi):

enter image description here

Quindi, se hai delle linee guida rigide per la tua interfaccia utente, imposta semplicemente i margini di cui hai bisogno e trascina i controlli sulle linee di allineamento.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top