Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции C# Часть 2 с желтым.doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
617 Кб
Скачать
☆

Анализ сгенерированного исходного кода

Исходный код получившегося на данный момент приложения распределен между тремя файлами Program.cs, Form1.cs и Form1.Designer.cs.

Файл Program.cs - его содержимое совсем небольшое и напоминает код, написанный в «пустом» оконном приложении. Главное в нем – уже знакомый оператор:

Application.Run(new Form1());

Важное отличие – при вызове метода Run используется не стандартный класс Form, а класс Form1. Это производный от Form класс, уже сгенерированный визуальным дизайнером в файлах Form1.cs и Form1.Designer.cs. Эти файлы содержат две «половинки» класса Form1. Такое разделение осуществляется с использованием ключевого слова partial в заголовках класса в обоих файлах:

Файл Form1.cs

public partial class Form1 : Form

. . .

Файл Form1.Designer.cs

partial class Form1

. . .

Главный вопрос – зачем нужно такое разделение. Это удобно в случае активного использования визуального дизайнера. Файл Form1.cs используется программистом для самостоятельного изменения класса. Содержимое файла Form1.Designer.cs автоматически заполняется кодом, сгенерированным визуальным дизайнером.

В текущем состоянии файл Form1.cs очень короткий:

using System;

//другие необходимые директивы using

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

}

}

Таким образом, в классе Form1 сейчас имеется конструктор, вызывающий метод InitializeComponent. Этот метод содержится в файле Form1.Designer.cs.

Файл Form1.Designer.cs уже сейчас довольно громоздкий. Поэтому при его рассмотрении опустим необязательные подробности. Сначала найдите в этом файле описания переменных класса – они находятся в конце класса Form1:

private System.Windows.Forms.Button button1;

private System.Windows.Forms.Label label1;

private System.Windows.Forms.TextBox textBox1;

Узнаете!? Эти три переменные button1, label1 и textBox1 сгенерированы в ответ на перетаскивание соответствующих элементов из Toolbox на форму.

Кроме того, в классе Form1 определен закрытый метод InitializeComponent:

В начале этого метода для переменных button1, label1 и textBox1 создаются соответствующие объекты:

this.button1 = new System.Windows.Forms.Button();

this.label1 = new System.Windows.Forms.Label();

this.textBox1 = new System.Windows.Forms.TextBox();

Далее для каждого элемента управления происходит установка его свойств. Например, для кнопки button1 это выглядит так:

this.button1.Location = new System.Drawing.Point(92, 52);

this.button1.Name = "button1";

this.button1.Size = new System.Drawing.Size(61, 26);

this.button1.TabIndex = 0;

this.button1.Text = "Делай";

this.button1.UseVisualStyleBackColor = true;

Напомним, что события Click кнопки Button1 был предусмотрен обработчик, который «привязан» к событию оператором:

this.button1.Click += new System.EventHandler(this.button1_Click);

Аналогично выглядит настройка элементов label1 и textBox1.

Для того чтобы форма визуально отображала элементы управления, недостаточно того, что эти элементы являются переменными класса формы. Необходимо разместить их в специальной коллекции, доступной через свойство Controls базового класса Form. В сгенерированном коде этим занимаются следующие строки:

this.Controls.Add(this.textBox1);

this.Controls.Add(this.label1);

this.Controls.Add(this.button1);

В следующем листинге рассмотренная структура программного кода представлена схематично.

Файл Program.cs

class Program

{. . .

static void Main()

{ . . .

Application.Run(new Form1());

}

}

Файл Form1.cs

public partial class Form1 : Form

{ public Form1()

{ InitializeComponent(); }

// обработчики событий

private void button1_Click(object sender, EventArgs e)

{ . . .}

. . .

}

Файл Form1.Designer.cs

partial class Form1

{ . . .

#region Windows Form Designer generated code

private void InitializeComponent()

{ //создание объектов-элементов управления

this.button1 = new System.Windows.Forms.Button();

this.label1 = new System.Windows.Forms.Label();

this.textBox1 = new System.Windows.Forms.TextBox();

// button1

this.button1.Location = new System.Drawing.Point(192, 23);

. . .

this.button1.Click += new System.EventHandler(this.button1_Click);

// label1

. . .

// textBox1

. . .

// Form1

. . .

this.Controls.Add(this.textBox1);

this.Controls.Add(this.label1);

this.Controls.Add(this.button1);

}

#endregion

//описание переменных для элементов управления

private System.Windows.Forms.Button button1;

private System.Windows.Forms.Label label1;

private System.Windows.Forms.TextBox textBox1;

}

Далее можно рассмотреть несколько других примеров:

- крестики-нолики.

Дальнейшая логика курса – рассмотрим способы постоянного хранения. Тогда можно будет рассмотреть архитектурные принципы, основанные на разделении на бизнес-логику, визуальный интерфейс и источник данных.