Auf Englisch lesen

Freigeben über


Control.PerformLayout Methode

Definition

Erzwingt die Anwendung von Layoutlogik auf untergeordnete Steuerelemente durch das Steuerelement.

Überlädt

PerformLayout(Control, String)

Erzwingt die Anwendung von Layoutlogik durch das Steuerelement auf sämtliche diesem untergeordneten Steuerelemente.

PerformLayout()

Erzwingt die Anwendung von Layoutlogik durch das Steuerelement auf sämtliche diesem untergeordneten Steuerelemente.

PerformLayout(Control, String)

Quelle:
Control.cs
Quelle:
Control.cs
Quelle:
Control.cs

Erzwingt die Anwendung von Layoutlogik durch das Steuerelement auf sämtliche diesem untergeordneten Steuerelemente.

C#
public void PerformLayout(System.Windows.Forms.Control affectedControl, string affectedProperty);
C#
public void PerformLayout(System.Windows.Forms.Control? affectedControl, string? affectedProperty);

Parameter

affectedControl
Control

Ein Control, das das zuletzt geänderte Steuerelement darstellt.

affectedProperty
String

Der Name der zuletzt geänderten Eigenschaft des Steuerelements.

Beispiele

Das folgende Codebeispiel zeigt, wie Sie die PerformLayout-Methode verwenden. Außerdem wird veranschaulicht, wie das Layout Ereignis ausgelöst wird. In diesem Beispiel ruft der Click Ereignishandler für Button1 explizit auf PerformLayout. Der Click Ereignishandler für Button2 ruft implizit auf PerformLayout. PerformLayout wird auch aufgerufen, wenn das Formular geladen wird. Button3 gibt das Steuerelement in den Zustand zurück, in dem es sich beim Laden befand. In jedem Fall wird das Layout Ereignis ausgelöst.

Dies ist ein vollständiges Beispiel. Fügen Sie zum Ausführen des Beispiels den folgenden Code in eine leere Form ein.

C#

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

public class LayoutForm:
    System.Windows.Forms.Form

{
    public LayoutForm() : base()
    {        
        InitializeComponent();
    }

    internal System.Windows.Forms.Button Button1;
    internal System.Windows.Forms.Button Button2;
    internal LayoutControl LayoutControl1;
    internal System.Windows.Forms.Button Button3;

    private void InitializeComponent()
    {
        this.Button1 = new System.Windows.Forms.Button();
        this.Button2 = new System.Windows.Forms.Button();
        this.Button3 = new System.Windows.Forms.Button();
        this.LayoutControl1 = new LayoutControl();
        this.SuspendLayout();
        this.Button1.Location = new System.Drawing.Point(16, 16);
        this.Button1.Name = "Button1";
        this.Button1.Size = new System.Drawing.Size(120, 32);
        this.Button1.TabIndex = 0;
        this.Button1.Text = "Center textbox on control";
        this.Button2.Location = new System.Drawing.Point(152, 16);
        this.Button2.Name = "Button2";
        this.Button2.Size = new System.Drawing.Size(104, 32);
        this.Button2.TabIndex = 3;
        this.Button2.Text = "Shrink user control";
        this.Button3.Location = new System.Drawing.Point(96, 232);
        this.Button3.Name = "Button3";
        this.Button3.TabIndex = 5;
        this.Button3.Text = "Reset";
        this.LayoutControl1.BackColor = System.Drawing.SystemColors.ControlDark;
        this.LayoutControl1.Location = new System.Drawing.Point(72, 64);
        this.LayoutControl1.Name = "LayoutControl1";
        this.LayoutControl1.Size = new System.Drawing.Size(150, 160);
        this.LayoutControl1.TabIndex = 6;
        this.ClientSize = new System.Drawing.Size(292, 266);
        this.Controls.Add(this.Button3);
        this.Controls.Add(this.Button2);
        this.Controls.Add(this.Button1);
        this.Controls.Add(this.LayoutControl1);
        this.Name = "Form1";
        this.Text = "Form1";
        this.ResumeLayout(false);
        this.Button1.Click += new System.EventHandler(Button1_Click);
        this.Button2.Click += new System.EventHandler(Button2_Click);
        this.Button3.Click += new System.EventHandler(Button3_Click);
    }

    [System.STAThread]
    public static void Main()
    {
        Application.Run(new LayoutForm());
    }

    // This method explicitly calls raises the layout event on 
    // LayoutControl1, changing the Bounds property.
    private void Button1_Click(System.Object sender, System.EventArgs e)
    {
        LayoutControl1.PerformLayout(LayoutControl1, "Bounds");
    }

    // This resize of LayoutControl1 implicitly triggers the layout event. 
    //  Changing the size of the control affects its Bounds property.
    private void Button2_Click(System.Object sender, System.EventArgs e)
    {
        LayoutControl1.Size = new System.Drawing.Size(100, 100);
    }

    // This method explicitly calls PerformLayout with no parameters, 
    // which raises the Layout event with the LayoutEventArgs properties
    // equal to Nothing.
    private void Button3_Click(System.Object sender, System.EventArgs e)
    {
        LayoutControl1.PerformLayout();
    }
}

// This custom control has the Layout event implented so that when 
// PerformLayout(AffectedControl, AffectedProperty) is called 
// on the control, where AffectedProperty equals "Bounds" the 
// textbox is centered on the control.
public class LayoutControl:
    System.Windows.Forms.UserControl
{
    internal System.Windows.Forms.TextBox TextBox1;

    public LayoutControl() : base()
    {        
        InitializeComponent();
    }

    private void InitializeComponent()
    {
        this.TextBox1 = new System.Windows.Forms.TextBox();
        this.SuspendLayout();
        this.TextBox1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
        this.TextBox1.Name = "TextBox1";
        this.TextBox1.TabIndex = 0;
        this.BackColor = System.Drawing.SystemColors.ControlDark;
        this.Controls.Add(this.TextBox1);
        this.Name = "LayoutControl";
        this.ResumeLayout(false);
        this.Layout += new LayoutEventHandler(LayoutControl_Layout);
    }

    // This method is called when the Layout event is fired. 
    // This happens by during the initial load, by calling PerformLayout
    // or by resizing, adding or removing controls or other actions that 
    // affect how the control is laid out. This method checks the 
    // value of e.AffectedProperty and changes the look of the 
    // control accordingly. 
    private void LayoutControl_Layout(object sender, 
        System.Windows.Forms.LayoutEventArgs e)
    {
        if (e.AffectedProperty != null)
        {
            if (e.AffectedProperty.Equals("Bounds"))
            {
                TextBox1.Left = (this.Width-TextBox1.Width)/2;
                TextBox1.Top = (this.Height-TextBox1.Height)/2;
            }
        }
        else
        {
            this.Size = new System.Drawing.Size(150, 160);
            TextBox1.Location = new System.Drawing.Point(16, 24);
        }
        TextBox1.Text = "Left = "+TextBox1.Left+" Top = "+TextBox1.Top;
    }
}

Hinweise

Wenn die SuspendLayout -Methode vor dem Aufrufen der PerformLayout -Methode aufgerufen wurde, wird das Layout Ereignis unterdrückt.

Die affectedControl Parameter und affectedProperty können auf festgelegt nullwerden. Dadurch werden die AffectedControl Eigenschaften und AffectedProperty des LayoutEventArgs erstellten auf nullfestgelegt.

Weitere Informationen

Gilt für:

.NET Framework 4.8.1 und andere Versionen
Produkt Versionen
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
Windows Desktop 3.0, 3.1, 5, 6, 7, 8, 9

PerformLayout()

Quelle:
Control.cs
Quelle:
Control.cs
Quelle:
Control.cs

Erzwingt die Anwendung von Layoutlogik durch das Steuerelement auf sämtliche diesem untergeordneten Steuerelemente.

C#
public void PerformLayout();

Beispiele

Das folgende Codebeispiel zeigt, wie Sie die PerformLayout-Methode verwenden. Außerdem wird veranschaulicht, wie das Layout Ereignis ausgelöst wird. In diesem Beispiel ruft der Click Ereignishandler für Button1 explizit auf PerformLayout. Der Click Ereignishandler für Button2 ruft implizit auf PerformLayout. PerformLayout wird auch aufgerufen, wenn das Formular geladen wird. Button3 gibt das Steuerelement in den Zustand zurück, in dem es sich beim Laden befand. In jedem Fall wird das Layout Ereignis ausgelöst.

Dies ist ein vollständiges Beispiel. Fügen Sie zum Ausführen des Beispiels den folgenden Code in eine leere Form ein.

C#

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

public class LayoutForm:
    System.Windows.Forms.Form

{
    public LayoutForm() : base()
    {        
        InitializeComponent();
    }

    internal System.Windows.Forms.Button Button1;
    internal System.Windows.Forms.Button Button2;
    internal LayoutControl LayoutControl1;
    internal System.Windows.Forms.Button Button3;

    private void InitializeComponent()
    {
        this.Button1 = new System.Windows.Forms.Button();
        this.Button2 = new System.Windows.Forms.Button();
        this.Button3 = new System.Windows.Forms.Button();
        this.LayoutControl1 = new LayoutControl();
        this.SuspendLayout();
        this.Button1.Location = new System.Drawing.Point(16, 16);
        this.Button1.Name = "Button1";
        this.Button1.Size = new System.Drawing.Size(120, 32);
        this.Button1.TabIndex = 0;
        this.Button1.Text = "Center textbox on control";
        this.Button2.Location = new System.Drawing.Point(152, 16);
        this.Button2.Name = "Button2";
        this.Button2.Size = new System.Drawing.Size(104, 32);
        this.Button2.TabIndex = 3;
        this.Button2.Text = "Shrink user control";
        this.Button3.Location = new System.Drawing.Point(96, 232);
        this.Button3.Name = "Button3";
        this.Button3.TabIndex = 5;
        this.Button3.Text = "Reset";
        this.LayoutControl1.BackColor = System.Drawing.SystemColors.ControlDark;
        this.LayoutControl1.Location = new System.Drawing.Point(72, 64);
        this.LayoutControl1.Name = "LayoutControl1";
        this.LayoutControl1.Size = new System.Drawing.Size(150, 160);
        this.LayoutControl1.TabIndex = 6;
        this.ClientSize = new System.Drawing.Size(292, 266);
        this.Controls.Add(this.Button3);
        this.Controls.Add(this.Button2);
        this.Controls.Add(this.Button1);
        this.Controls.Add(this.LayoutControl1);
        this.Name = "Form1";
        this.Text = "Form1";
        this.ResumeLayout(false);
        this.Button1.Click += new System.EventHandler(Button1_Click);
        this.Button2.Click += new System.EventHandler(Button2_Click);
        this.Button3.Click += new System.EventHandler(Button3_Click);
    }

    [System.STAThread]
    public static void Main()
    {
        Application.Run(new LayoutForm());
    }

    // This method explicitly calls raises the layout event on 
    // LayoutControl1, changing the Bounds property.
    private void Button1_Click(System.Object sender, System.EventArgs e)
    {
        LayoutControl1.PerformLayout(LayoutControl1, "Bounds");
    }

    // This resize of LayoutControl1 implicitly triggers the layout event. 
    //  Changing the size of the control affects its Bounds property.
    private void Button2_Click(System.Object sender, System.EventArgs e)
    {
        LayoutControl1.Size = new System.Drawing.Size(100, 100);
    }

    // This method explicitly calls PerformLayout with no parameters, 
    // which raises the Layout event with the LayoutEventArgs properties
    // equal to Nothing.
    private void Button3_Click(System.Object sender, System.EventArgs e)
    {
        LayoutControl1.PerformLayout();
    }
}

// This custom control has the Layout event implented so that when 
// PerformLayout(AffectedControl, AffectedProperty) is called 
// on the control, where AffectedProperty equals "Bounds" the 
// textbox is centered on the control.
public class LayoutControl:
    System.Windows.Forms.UserControl
{
    internal System.Windows.Forms.TextBox TextBox1;

    public LayoutControl() : base()
    {        
        InitializeComponent();
    }

    private void InitializeComponent()
    {
        this.TextBox1 = new System.Windows.Forms.TextBox();
        this.SuspendLayout();
        this.TextBox1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
        this.TextBox1.Name = "TextBox1";
        this.TextBox1.TabIndex = 0;
        this.BackColor = System.Drawing.SystemColors.ControlDark;
        this.Controls.Add(this.TextBox1);
        this.Name = "LayoutControl";
        this.ResumeLayout(false);
        this.Layout += new LayoutEventHandler(LayoutControl_Layout);
    }

    // This method is called when the Layout event is fired. 
    // This happens by during the initial load, by calling PerformLayout
    // or by resizing, adding or removing controls or other actions that 
    // affect how the control is laid out. This method checks the 
    // value of e.AffectedProperty and changes the look of the 
    // control accordingly. 
    private void LayoutControl_Layout(object sender, 
        System.Windows.Forms.LayoutEventArgs e)
    {
        if (e.AffectedProperty != null)
        {
            if (e.AffectedProperty.Equals("Bounds"))
            {
                TextBox1.Left = (this.Width-TextBox1.Width)/2;
                TextBox1.Top = (this.Height-TextBox1.Height)/2;
            }
        }
        else
        {
            this.Size = new System.Drawing.Size(150, 160);
            TextBox1.Location = new System.Drawing.Point(16, 24);
        }
        TextBox1.Text = "Left = "+TextBox1.Left+" Top = "+TextBox1.Top;
    }
}

Hinweise

Wenn die SuspendLayout -Methode vor dem Aufrufen der PerformLayout -Methode aufgerufen wurde, wird das Layout Ereignis unterdrückt.

Die AffectedControl Eigenschaften und AffectedProperty des LayoutEventArgs erstellten werden auf null festgelegt, wenn beim Aufrufen der PerformLayout Methode keine Werte angegeben wurden.

Weitere Informationen

Gilt für:

.NET Framework 4.8.1 und andere Versionen
Produkt Versionen
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
Windows Desktop 3.0, 3.1, 5, 6, 7, 8, 9