Чтение онлайн

на главную - закладки

Жанры

C# для профессионалов. Том II

Ватсон Карли

Шрифт:

public class SquareRootForm : System.Windows.Forms.Form {

 private System.Windows.Forms.TextBox txtNumber;

 private System.Windows.Forms.TextBox txtSign;

 private System.Windows.Forms.TextBox txtResult;

 private System.Windows.Forms.Button cmdShowResults;

 private System.Windows.Forms.Label label1;

 private System.Windows.Forms.Label label2;

 private System.Windows.Forms.Label label3;

 private System.Windows.Forms.Label label4;

Каждое из этих полей соответствует одному из элементов управления.

Можно легко увидеть три текстовых поля и кнопку. Имеются также четыре метки, соответствующие областям текста на форме. Мы не будем ничего делать с этими метками, поэтому не стоит беспокоиться и давать им какие-то более понятные пользователю имена.

Однако каждая из этих переменных является просто ссылкой на объект, поэтому тот факт, что эти переменные существуют, не означает существования никаких экземпляров этих объектов — экземпляры объектов должны быть созданы отдельно. Процесс создания экземпляров этих элементов управления осуществляется с помощью так называемого конструктора. Конструктор в C# является примерным аналогом таким подпрограммам, как

Form_Load
,
Form_Initialize
,
Class_Load
и
Class_Initialize
. Это специальный метод, который автоматически вызывается, когда создается экземпляр класса, и он содержит код, необходимый для инициализации экземпляра.

Конструктор в классе легко опознать, так как он всегда имеет такое же имя, как и сам класс. В данном случае мы ищем метод с именем

SquareRootForm
:

public SquareRootForm {

 InitializeComponent;

}

Отметим, что так как это — конструктор, а не метод, который можно вызывать, он не определяет никакого возвращаемого типа. Однако после его имени стоят скобки, как и у метода. Можно использовать эти скобки для определения параметров, которые будут передаваться в конструктор (вспомните, что при создании переменной можно передавать параметры в скобках после предложения

new
). Определение конструктора указывает, нужны ли какие-то параметры для создания экземпляра объекта. Однако здесь нет никаких параметров. Мы увидим конструкторы, которые получают параметры, в примере
Employee
, рассматриваемом дальше в этом приложении.

В данном случае конструктор просто вызывает метод

InitializeComponent
. Это в действительности связано с Visual Studio.NET. Visual Studio NET имеет все те же свойства, что и IDE VB6 для графических манипуляций элементами управления — щелчок мышью для размещения элементов управления на форме и т.д. Однако, так как теперь в C# определения всех элементов управления задаются в исходном коде, Visual Studio.NET должна иметь возможность прочитать исходный код, чтобы определить, какие элементы управления находятся на форме. Она делает это, разыскивая метод
InitializeComponent
и определяя, экземпляры каких элементов управления там создаются.

InitializeComponent
является большим методом, поэтому он будет показан здесь полностью. Начинается он следующим образом:

private void InitializeComponent {

 this.txtNumber = new System.Windows.Forms.TextBox;

 this.txtSign = new System.Windows.Forms.TextBox;

 this.cmdShowResults = new System.Windows.Forms.Button;

 this.label3 = new System.Windows.Forms.Label;

 this.label4 = new System.Windows.Forms.Label;

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

 this.label2 = new System.Windows.Forms.Label;

 this.txtResult = new System.Windows.Forms.TextBox;

Показанный код является множеством вызовов для реального создания экземпляров всех элементов управления на форме. Этот фрагмент кода не содержит на самом деле ни одного нового элемента синтаксиса C#, который бы до сих пор не встречался. Следующая часть кода начинает задавать

свойства элементов управления:

 //

 // txtNumber

 //

 this.txtNumber.Location = new System.Drawing.Point(160, 24);

 this.txtNumber.Name = "txtNumber";

 this.txtNumber.TabIndex = 0; this.txtNumber.Text = "";

 //

 // txtSign

 //

 this.txtSign.Enabled = false;

 this.txtSign.Location = new System.Drawing.Point(160, 136);

 this.txtSign.Name = "txtSign";

 this.txtSign.TabIndex = 1;

 this.txtSign.Text = "";

Этот код задаёт начальные позиции и начальный текст двух элементов управления, текстового поля ввода и текстового поля, которое выводит знак заданного числа. Новый элемент кода состоит в том что положение относительно верхнего левого угла экрана задается с помощью

Point
.
Point
является базовым классом .NET (строго говоря, структурой), который содержит x- и y-координаты. Синтаксис двух строк, задающих Location, является инструктивным. Свойство
TextBox.Location
является просто ссылкой на
Point
, поэтому, чтобы задать ему значение, необходимо создать и инициализировать объект
Point
, содержащий правильные координаты. Это первое использование нами конструктора с параметрами — в данном случае горизонтальной и вертикальной координат
Point
и, следовательно, элемента управления. Если было бы желательно транслировать одну из этих строк в VB, предполагая, что был определён некоторый модуль класса VB с именем
Point
, и мы имели бы класс, который имеет такое свойство, то лучшее, что можно было бы сделать, выглядело бы примерно следующим образом:

Dim Location As Point

Set Location = New Point

Location.X = 160

Location.Y = 24

SomeObject.Location = Location

Это сравнимо со следующим кодом на C#:

someObject.Location = new System.Drawing.Point(160, 24);

Относительная компактность эквивалентной инструкции C# должна быть очевидна.

Теперь рассмотрим те же команды для кнопки. В этом случае можно наблюдать задание свойств такого же вида, но здесь имеется другая вещь, которую необходимо выполнить: приказать Windows вызвать наш обработчик событий, когда нажимается кнопка. Это делает последняя строка из нижеследующих.

 this.cmdShowResults.Name = "cmdShowResults";

 this.cmdShowResults.Size = new System.Drawing.Size(88, 23);

 this.cmdShowResults.TabIndex = 3;

 this.cmdShowResults.Text = "Show Results";

 this.cmdShowResults.Click +=

new System.EventHandler(this.OnClickShowResults);

Здесь происходит следующее. Кнопка, обозначенная как объект кнопки

cmdShowResults
, содержит событие
Click
, которое будет инициироваться, когда пользователь на нее нажмет. Надо добавить для этого события собственный обработчик событий. Сейчас C# не разрешает передавать имена методов непосредственно, вместо этого они должны помещаться в так называемый объект делегат. Детали этого здесь не рассматриваются, они приведены в главе 6 данной книги, но это делается для обеспечения безопасности типов. Вследствие такого действия появляется текст
new System.EventHandler
в этом коде. Когда имя обработчика событий будет спрятано, мы добавим его к событию, используя оператор
+=
, который будет рассмотрен ниже.

Поделиться:
Популярные книги

Младший сын князя. Том 8

Ткачев Андрей Сергеевич
8. Аналитик
Старинная литература:
прочая старинная литература
5.00
рейтинг книги
Младший сын князя. Том 8

Хозяйка расцветающего поместья

Шнейдер Наталья
Фантастика:
попаданцы
фэнтези
5.00
рейтинг книги
Хозяйка расцветающего поместья

Товарищ "Чума" 3

lanpirot
3. Товарищ "Чума"
Фантастика:
городское фэнтези
попаданцы
альтернативная история
5.00
рейтинг книги
Товарищ Чума 3

Барон диктует правила

Ренгач Евгений
4. Закон сильного
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Барон диктует правила

Запределье

Михайлов Дем Алексеевич
6. Мир Вальдиры
Фантастика:
фэнтези
рпг
9.06
рейтинг книги
Запределье

Сердце Дракона. Том 8

Клеванский Кирилл Сергеевич
8. Сердце дракона
Фантастика:
фэнтези
героическая фантастика
боевая фантастика
7.53
рейтинг книги
Сердце Дракона. Том 8

Я еще не князь. Книга XIV

Дрейк Сириус
14. Дорогой барон!
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Я еще не князь. Книга XIV

Рождение победителя

Каменистый Артем
3. Девятый
Фантастика:
фэнтези
альтернативная история
9.07
рейтинг книги
Рождение победителя

Крестоносец

Ланцов Михаил Алексеевич
7. Помещик
Фантастика:
героическая фантастика
попаданцы
альтернативная история
5.00
рейтинг книги
Крестоносец

Ведьма Вильхельма

Шёпот Светлана
Любовные романы:
любовно-фантастические романы
8.67
рейтинг книги
Ведьма Вильхельма

Убивать чтобы жить 5

Бор Жорж
5. УЧЖ
Фантастика:
боевая фантастика
космическая фантастика
рпг
5.00
рейтинг книги
Убивать чтобы жить 5

Тот самый сантехник. Трилогия

Мазур Степан Александрович
Тот самый сантехник
Приключения:
прочие приключения
5.00
рейтинг книги
Тот самый сантехник. Трилогия

Архонт

Прокофьев Роман Юрьевич
5. Стеллар
Фантастика:
боевая фантастика
рпг
7.80
рейтинг книги
Архонт

Ротмистр Гордеев 2

Дашко Дмитрий
2. Ротмистр Гордеев
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Ротмистр Гордеев 2