Control.PerformLayout 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
强制控件将布局逻辑应用于子控件。
重载
PerformLayout(Control, String) |
强制控件将布局逻辑应用于其所有子控件。 |
PerformLayout() |
强制控件将布局逻辑应用于其所有子控件。 |
PerformLayout(Control, String)
强制控件将布局逻辑应用于其所有子控件。
public:
void PerformLayout(System::Windows::Forms::Control ^ affectedControl, System::String ^ affectedProperty);
public void PerformLayout (System.Windows.Forms.Control affectedControl, string affectedProperty);
public void PerformLayout (System.Windows.Forms.Control? affectedControl, string? affectedProperty);
member this.PerformLayout : System.Windows.Forms.Control * string -> unit
Public Sub PerformLayout (affectedControl As Control, affectedProperty As String)
参数
- affectedProperty
- String
此控件上最近更改的属性的名称。
示例
下面的代码示例演示如何使用 PerformLayout 方法。 它还演示了引发事件的方式 Layout 。 在此示例中, Click
的 Button1
事件处理程序显式调用 PerformLayout。 的Click
Button2
事件处理程序隐式调用 PerformLayout。
PerformLayout 在加载窗体时,也会调用 。
Button3
将控件返回到加载时处于的状态。 在每种情况下, Layout 都会引发 事件。
这是一个完整示例。 若要运行该示例,请将以下代码粘贴到空白窗体中。
using namespace System;
using namespace System::Windows::Forms;
using namespace System::Drawing;
// 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 ref class LayoutControl: public System::Windows::Forms::UserControl
{
public private:
System::Windows::Forms::TextBox^ TextBox1;
public:
LayoutControl()
: UserControl()
{
InitializeComponent();
}
private:
void InitializeComponent()
{
this->TextBox1 = gcnew 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 += gcnew LayoutEventHandler( this, &LayoutControl::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.
void LayoutControl_Layout( Object^ /*sender*/, System::Windows::Forms::LayoutEventArgs^ e )
{
if ( e->AffectedProperty != nullptr )
{
if ( e->AffectedProperty->Equals( "Bounds" ) )
{
TextBox1->Left = (this->Width - TextBox1->Width) / 2;
TextBox1->Top = (this->Height - TextBox1->Height) / 2;
}
}
else
{
this->Size = System::Drawing::Size( 150, 160 );
TextBox1->Location = System::Drawing::Point( 16, 24 );
}
TextBox1->Text = String::Format( "Left = {0} Top = {1}", TextBox1->Left, TextBox1->Top );
}
};
public ref class LayoutForm: public System::Windows::Forms::Form
{
public:
LayoutForm()
: Form()
{
InitializeComponent();
}
public private:
System::Windows::Forms::Button^ Button1;
System::Windows::Forms::Button^ Button2;
LayoutControl^ LayoutControl1;
System::Windows::Forms::Button^ Button3;
private:
void InitializeComponent()
{
this->Button1 = gcnew System::Windows::Forms::Button;
this->Button2 = gcnew System::Windows::Forms::Button;
this->Button3 = gcnew System::Windows::Forms::Button;
this->LayoutControl1 = gcnew LayoutControl;
this->SuspendLayout();
this->Button1->Location = System::Drawing::Point( 16, 16 );
this->Button1->Name = "Button1";
this->Button1->Size = System::Drawing::Size( 120, 32 );
this->Button1->TabIndex = 0;
this->Button1->Text = "Center textbox on control";
this->Button2->Location = System::Drawing::Point( 152, 16 );
this->Button2->Name = "Button2";
this->Button2->Size = System::Drawing::Size( 104, 32 );
this->Button2->TabIndex = 3;
this->Button2->Text = "Shrink user control";
this->Button3->Location = 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 = System::Drawing::Point( 72, 64 );
this->LayoutControl1->Name = "LayoutControl1";
this->LayoutControl1->Size = System::Drawing::Size( 150, 160 );
this->LayoutControl1->TabIndex = 6;
this->ClientSize = 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 += gcnew System::EventHandler( this,&LayoutForm::Button1_Click );
this->Button2->Click += gcnew System::EventHandler( this,&LayoutForm::Button2_Click );
this->Button3->Click += gcnew System::EventHandler( this,&LayoutForm::Button3_Click );
}
// This method explicitly calls raises the layout event on
// LayoutControl1, changing the Bounds property.
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.
void Button2_Click( System::Object^ /*sender*/, System::EventArgs^ /*e*/ )
{
LayoutControl1->Size = 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.
void Button3_Click( System::Object^ /*sender*/, System::EventArgs^ /*e*/ )
{
LayoutControl1->PerformLayout();
}
};
[System::STAThread]
int main()
{
Application::Run( gcnew LayoutForm );
}
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;
}
}
Imports System.Windows.Forms
Imports System.Drawing
Public Class LayoutForm
Inherits System.Windows.Forms.Form
Public Sub New()
MyBase.New()
InitializeComponent()
End Sub
Friend WithEvents Button1 As System.Windows.Forms.Button
Friend WithEvents Button2 As System.Windows.Forms.Button
Friend WithEvents LayoutControl1 As LayoutControl
Friend WithEvents Button3 As System.Windows.Forms.Button
Private Sub InitializeComponent()
Me.Button1 = New System.Windows.Forms.Button
Me.Button2 = New System.Windows.Forms.Button
Me.Button3 = New System.Windows.Forms.Button
Me.LayoutControl1 = New LayoutControl
Me.SuspendLayout()
Me.Button1.Location = New System.Drawing.Point(16, 16)
Me.Button1.Name = "Button1"
Me.Button1.Size = New System.Drawing.Size(120, 32)
Me.Button1.TabIndex = 0
Me.Button1.Text = "Center textbox on control"
Me.Button2.Location = New System.Drawing.Point(152, 16)
Me.Button2.Name = "Button2"
Me.Button2.Size = New System.Drawing.Size(104, 32)
Me.Button2.TabIndex = 3
Me.Button2.Text = "Shrink user control"
Me.Button3.Location = New System.Drawing.Point(96, 232)
Me.Button3.Name = "Button3"
Me.Button3.TabIndex = 5
Me.Button3.Text = "Reset"
Me.LayoutControl1.BackColor = System.Drawing.SystemColors.ControlDark
Me.LayoutControl1.Location = New System.Drawing.Point(72, 64)
Me.LayoutControl1.Name = "LayoutControl1"
Me.LayoutControl1.Size = New System.Drawing.Size(150, 160)
Me.LayoutControl1.TabIndex = 6
Me.ClientSize = New System.Drawing.Size(292, 266)
Me.Controls.Add(Me.Button3)
Me.Controls.Add(Me.Button2)
Me.Controls.Add(Me.Button1)
Me.Controls.Add(Me.LayoutControl1)
Me.Name = "Form1"
Me.Text = "Form1"
Me.ResumeLayout(False)
End Sub
<System.STAThread()> Shared Sub Main()
Application.Run(New LayoutForm)
End Sub
' This method explicitly calls raises the layout event on
' LayoutControl1, changing the Bounds property.
Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click
LayoutControl1.PerformLayout(LayoutControl1, "Bounds")
End Sub
' This resize of LayoutControl1 implicitly triggers the layout event.
' Changing the size of the control affects its Bounds property.
Private Sub Button2_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button2.Click
LayoutControl1.Size = New System.Drawing.Size(100, 100)
End Sub
' This method explicitly calls PerformLayout with no parameters,
' which raises the Layout event with the LayoutEventArgs properties
' equal to Nothing.
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
LayoutControl1.PerformLayout()
End Sub
End Class
'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
Inherits System.Windows.Forms.UserControl
Friend WithEvents TextBox1 As System.Windows.Forms.TextBox
Public Sub New()
MyBase.New()
InitializeComponent()
End Sub
Private Sub InitializeComponent()
Me.TextBox1 = New System.Windows.Forms.TextBox
Me.SuspendLayout()
Me.TextBox1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle
Me.TextBox1.Name = "TextBox1"
Me.TextBox1.TabIndex = 0
Me.BackColor = System.Drawing.SystemColors.ControlDark
Me.Controls.Add(Me.TextBox1)
Me.Name = "LayoutControl"
Me.ResumeLayout(False)
End Sub
'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 Sub LayoutControl_Layout(ByVal sender As Object, ByVal e As System.Windows.Forms.LayoutEventArgs) Handles MyBase.Layout
If e.AffectedProperty IsNot Nothing Then
If e.AffectedProperty.Equals("Bounds") Then
TextBox1.Left = (Me.Width - TextBox1.Width) / 2
TextBox1.Top = (Me.Height - TextBox1.Height) / 2
End If
Else
Me.Size = New System.Drawing.Size(150, 160)
TextBox1.Location = New System.Drawing.Point(16, 24)
End If
TextBox1.Text = "Left = " & TextBox1.Left & " Top = " & TextBox1.Top
End Sub
End Class
注解
SuspendLayout如果在调用 PerformLayout 方法之前调用了 方法,则会Layout禁止该事件。
affectedControl
和 affectedProperty
参数都可以设置为 null
。 这样做会导致AffectedControl创建的 的 LayoutEventArgs 和 AffectedProperty 属性设置为 null
。
另请参阅
- ResumeLayout()
- LayoutEngine
- Layout
- PerformLayout()
- SuspendLayout()
- InitLayout()
- BackgroundImageLayout
适用于
PerformLayout()
强制控件将布局逻辑应用于其所有子控件。
public:
void PerformLayout();
public void PerformLayout ();
member this.PerformLayout : unit -> unit
Public Sub PerformLayout ()
示例
下面的代码示例演示如何使用 PerformLayout 方法。 它还演示了引发事件的方式 Layout 。 在此示例中, Click
的 Button1
事件处理程序显式调用 PerformLayout。 的Click
Button2
事件处理程序隐式调用 PerformLayout。
PerformLayout 在加载窗体时,也会调用 。
Button3
将控件返回到加载时处于的状态。 在每种情况下, Layout 都会引发 事件。
这是一个完整示例。 若要运行该示例,请将以下代码粘贴到空白窗体中。
using namespace System;
using namespace System::Windows::Forms;
using namespace System::Drawing;
// 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 ref class LayoutControl: public System::Windows::Forms::UserControl
{
public private:
System::Windows::Forms::TextBox^ TextBox1;
public:
LayoutControl()
: UserControl()
{
InitializeComponent();
}
private:
void InitializeComponent()
{
this->TextBox1 = gcnew 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 += gcnew LayoutEventHandler( this, &LayoutControl::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.
void LayoutControl_Layout( Object^ /*sender*/, System::Windows::Forms::LayoutEventArgs^ e )
{
if ( e->AffectedProperty != nullptr )
{
if ( e->AffectedProperty->Equals( "Bounds" ) )
{
TextBox1->Left = (this->Width - TextBox1->Width) / 2;
TextBox1->Top = (this->Height - TextBox1->Height) / 2;
}
}
else
{
this->Size = System::Drawing::Size( 150, 160 );
TextBox1->Location = System::Drawing::Point( 16, 24 );
}
TextBox1->Text = String::Format( "Left = {0} Top = {1}", TextBox1->Left, TextBox1->Top );
}
};
public ref class LayoutForm: public System::Windows::Forms::Form
{
public:
LayoutForm()
: Form()
{
InitializeComponent();
}
public private:
System::Windows::Forms::Button^ Button1;
System::Windows::Forms::Button^ Button2;
LayoutControl^ LayoutControl1;
System::Windows::Forms::Button^ Button3;
private:
void InitializeComponent()
{
this->Button1 = gcnew System::Windows::Forms::Button;
this->Button2 = gcnew System::Windows::Forms::Button;
this->Button3 = gcnew System::Windows::Forms::Button;
this->LayoutControl1 = gcnew LayoutControl;
this->SuspendLayout();
this->Button1->Location = System::Drawing::Point( 16, 16 );
this->Button1->Name = "Button1";
this->Button1->Size = System::Drawing::Size( 120, 32 );
this->Button1->TabIndex = 0;
this->Button1->Text = "Center textbox on control";
this->Button2->Location = System::Drawing::Point( 152, 16 );
this->Button2->Name = "Button2";
this->Button2->Size = System::Drawing::Size( 104, 32 );
this->Button2->TabIndex = 3;
this->Button2->Text = "Shrink user control";
this->Button3->Location = 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 = System::Drawing::Point( 72, 64 );
this->LayoutControl1->Name = "LayoutControl1";
this->LayoutControl1->Size = System::Drawing::Size( 150, 160 );
this->LayoutControl1->TabIndex = 6;
this->ClientSize = 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 += gcnew System::EventHandler( this,&LayoutForm::Button1_Click );
this->Button2->Click += gcnew System::EventHandler( this,&LayoutForm::Button2_Click );
this->Button3->Click += gcnew System::EventHandler( this,&LayoutForm::Button3_Click );
}
// This method explicitly calls raises the layout event on
// LayoutControl1, changing the Bounds property.
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.
void Button2_Click( System::Object^ /*sender*/, System::EventArgs^ /*e*/ )
{
LayoutControl1->Size = 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.
void Button3_Click( System::Object^ /*sender*/, System::EventArgs^ /*e*/ )
{
LayoutControl1->PerformLayout();
}
};
[System::STAThread]
int main()
{
Application::Run( gcnew LayoutForm );
}
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;
}
}
Imports System.Windows.Forms
Imports System.Drawing
Public Class LayoutForm
Inherits System.Windows.Forms.Form
Public Sub New()
MyBase.New()
InitializeComponent()
End Sub
Friend WithEvents Button1 As System.Windows.Forms.Button
Friend WithEvents Button2 As System.Windows.Forms.Button
Friend WithEvents LayoutControl1 As LayoutControl
Friend WithEvents Button3 As System.Windows.Forms.Button
Private Sub InitializeComponent()
Me.Button1 = New System.Windows.Forms.Button
Me.Button2 = New System.Windows.Forms.Button
Me.Button3 = New System.Windows.Forms.Button
Me.LayoutControl1 = New LayoutControl
Me.SuspendLayout()
Me.Button1.Location = New System.Drawing.Point(16, 16)
Me.Button1.Name = "Button1"
Me.Button1.Size = New System.Drawing.Size(120, 32)
Me.Button1.TabIndex = 0
Me.Button1.Text = "Center textbox on control"
Me.Button2.Location = New System.Drawing.Point(152, 16)
Me.Button2.Name = "Button2"
Me.Button2.Size = New System.Drawing.Size(104, 32)
Me.Button2.TabIndex = 3
Me.Button2.Text = "Shrink user control"
Me.Button3.Location = New System.Drawing.Point(96, 232)
Me.Button3.Name = "Button3"
Me.Button3.TabIndex = 5
Me.Button3.Text = "Reset"
Me.LayoutControl1.BackColor = System.Drawing.SystemColors.ControlDark
Me.LayoutControl1.Location = New System.Drawing.Point(72, 64)
Me.LayoutControl1.Name = "LayoutControl1"
Me.LayoutControl1.Size = New System.Drawing.Size(150, 160)
Me.LayoutControl1.TabIndex = 6
Me.ClientSize = New System.Drawing.Size(292, 266)
Me.Controls.Add(Me.Button3)
Me.Controls.Add(Me.Button2)
Me.Controls.Add(Me.Button1)
Me.Controls.Add(Me.LayoutControl1)
Me.Name = "Form1"
Me.Text = "Form1"
Me.ResumeLayout(False)
End Sub
<System.STAThread()> Shared Sub Main()
Application.Run(New LayoutForm)
End Sub
' This method explicitly calls raises the layout event on
' LayoutControl1, changing the Bounds property.
Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click
LayoutControl1.PerformLayout(LayoutControl1, "Bounds")
End Sub
' This resize of LayoutControl1 implicitly triggers the layout event.
' Changing the size of the control affects its Bounds property.
Private Sub Button2_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button2.Click
LayoutControl1.Size = New System.Drawing.Size(100, 100)
End Sub
' This method explicitly calls PerformLayout with no parameters,
' which raises the Layout event with the LayoutEventArgs properties
' equal to Nothing.
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
LayoutControl1.PerformLayout()
End Sub
End Class
'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
Inherits System.Windows.Forms.UserControl
Friend WithEvents TextBox1 As System.Windows.Forms.TextBox
Public Sub New()
MyBase.New()
InitializeComponent()
End Sub
Private Sub InitializeComponent()
Me.TextBox1 = New System.Windows.Forms.TextBox
Me.SuspendLayout()
Me.TextBox1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle
Me.TextBox1.Name = "TextBox1"
Me.TextBox1.TabIndex = 0
Me.BackColor = System.Drawing.SystemColors.ControlDark
Me.Controls.Add(Me.TextBox1)
Me.Name = "LayoutControl"
Me.ResumeLayout(False)
End Sub
'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 Sub LayoutControl_Layout(ByVal sender As Object, ByVal e As System.Windows.Forms.LayoutEventArgs) Handles MyBase.Layout
If e.AffectedProperty IsNot Nothing Then
If e.AffectedProperty.Equals("Bounds") Then
TextBox1.Left = (Me.Width - TextBox1.Width) / 2
TextBox1.Top = (Me.Height - TextBox1.Height) / 2
End If
Else
Me.Size = New System.Drawing.Size(150, 160)
TextBox1.Location = New System.Drawing.Point(16, 24)
End If
TextBox1.Text = "Left = " & TextBox1.Left & " Top = " & TextBox1.Top
End Sub
End Class
注解
SuspendLayout如果在调用 PerformLayout 方法之前调用了 方法,则会Layout禁止该事件。
AffectedControl如果在调用 方法时未提供任何值,PerformLayout则创建的 的 和 AffectedProperty 属性LayoutEventArgs设置为 null
。
另请参阅
- ResumeLayout()
- LayoutEngine
- Layout
- PerformLayout()
- SuspendLayout()
- InitLayout()
- BackgroundImageLayout