#.net #winforms
#.net #winforms
Вопрос:
Кто-нибудь может помочь мне понять анатомию Windows Form (.net)?
Когда я создаю новую форму Windows из моего приложения .NET, я вижу в классе designer некоторый базовый объем кода, сгенерированного studio. Я только что скопировал вставленный ниже.
namespace FormBasic
{
partial class Form1
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing amp;amp; (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.SuspendLayout();
//
// Form1
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(292, 266);
this.Name = "Form1";
this.Text = "Form1";
this.ResumeLayout(false);
}
#endregion
}
}
Из них мне показалась интересной эта строка кода
private System.ComponentModel.IContainer components = null;
Что именно представляет собой этот контейнер?
Я отладил, установив точку останова в InitializeComponent
функции. components
Остаются нулевыми.
Кроме того, иерархия класса Form — это класс Form, наследуемый от ContainerControl
class. Не могли бы вы, пожалуйста, помочь мне разобраться с этими терминологиями?
Комментарии:
1. Поместите элемент управления на страницу, снова запустите debug и посмотрите, что произойдет 🙂
2. Я это сделал. В коде конструктора происходят незначительные изменения для адаптации к недавно добавленному элементу управления. Но все равно компоненты остаются пустыми.
3. Вы спрашиваете, потому что хотите иметь возможность делать что-то конкретное, или вам просто интересно, как работает дизайнерский код?
Ответ №1:
components
Поле является контейнером для невизуальных компонентов (таких как OpenFileDialog
, ErrorProvider
, FileSystemWatcher
…). Это инициализируется только в том случае, если у вас есть такие компоненты в вашей форме. Это способ гарантировать, что эти компоненты будут удалены при удалении формы.
Комментарии:
1. ОК. в этом и была загвоздка. НЕВИЗУАЛЬНЫЙ!!!! Спасибо. Но есть ли что-нибудь еще, что вы можете добавить или предоставить ссылку, чтобы я мог больше узнать о Windows forms.
2. @Nishant, эта страница выглядит как хорошая отправная точка
Ответ №2:
Строка private System.ComponentModel.IContainer components = null;
облегчает управление элементами, подобными Timer
или BackgroundWorker
, в разделе «Компоненты» панели инструментов. В редакторе они отображаются следующим образом: