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

ЖАНРЫ

ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание

Троелсен Эндрю

Шрифт:

// Получение доступа к вложенной коллекции ControlCollection формы.

Control.ControlCollection coll = this.Controls;

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

Таблица 21.1. Члены ControlCollection

Член Описание
Add AddRange Используются для добавления в коллекцию нового производного от Control типа (или массива типов)
Clear Удаляет все элементы из коллекции
Count Возвращает
число элементов, имеющихся в коллекции
GetEnumerator Возвращает интерфейс IEnumerator для данной коллекции
Remove RemoveAt Используются для удаления элемента из коллекции

Ввиду того, что форма поддерживает коллекцию элементов управления, в Windows Forms очень просто динамически создавать, удалять или как-то иначе обрабатывать визуальные элементы. Предположим, например, что вы хотите отключить все типы Button в данной форме (или выполнить иное подобное действие, например, изменить цвет фона всех TextBox). Для этого можно использовать ключевое слово is C#, чтобы обнаружить нужные элементы и соответственно изменить их состояние.

private void DisableAllButtos {

 foreach (Control с in this.Controls) {

if (c is Button) ((Button)c).Enabled = false;

 }

}

Исходный код. Проект ControlsByHand размещен в подкаталоге, соответствующем главе 21.

Добавление элементов управления в форму в Visual Studio 2005

Теперь, когда вы понимаете суть процесса добавления элементов управления в форму, давайте посмотрим, как Visual Studio 2005 может автоматизировать этот процесс. Создайте новый проект Windows Application, выбрав дня него произвольное имя, поскольку этот проект будет предназначен только для тестирования. Аналогично рассмотренному в главе 19 случаю создания меню, панелей инструментов и строк состояния, когда среда IDE выполняла автоматическое добавление подходящей переменной в файл *.Designer.cs, те же действия выполняются средой разработки и при перетаскивании в окно проектирования формы любого другого элемента управления. Точно так же при изменении внешнего вида элемента с помощью окна свойств IDE выполняется соответствующие изменения программного кода члена-функции InitializeComponent (также размещенного в файле *.Designer.cs).

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

Добавьте в окно проектирования формы типы TextBox (текстовое окно) и Button (кнопка). Обратите внимание на то, что при изменении положения элемента управления в окне проектирования формы Visual Studio 2005 предлагаются визуальные подсказки, касающиеся размещения и выравнивания этого элемента (рис. 21.2).

После размещения Button и Textbox в окне проектирования формы рассмотрите программный код, сгенерированный в методе InitializeComponent. Вы обнаружите, что соответствующие типы автоматически были созданы с помощью new и добавлены в коллекцию ControlCollection формы (в дополнение к установкам, которые вы, возможно, добавили с помощью окна свойств).

private void InitializeComponent {

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

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

 …

 // MainWindow

 //

 …

 this.Controls.Add(this.txtMyTextBox);

 this.Controls.Add(this.btnMyButton);

 …

}

Рис. 21.2.

Визуальные подсказки по поводу выравнивания и размещения элементов управления в форме

Как видите, такие инструменты, как Visual Studio 2005, во многом избавляют вас от необходимости вводить программный код вручную (возможно, избавляя и от боли в пальцах). Итак, в результате ваших действий в окне проектирования формы среда разработки автоматически модифицирует InitializeComponent. Но вы также можете конфигурировать элементы управления и непосредственно в программном коде (в конструкторах, обработчиках событий, вспомогательных функциях и т.д.), поскольку задачей InitializeComponent является создание начального состояния элементов интерфейса. Тем не менее, если вы хотите упростить себе жизнь, позвольте Visual Studio 2005 поддерживать InitializeComponent автоматически, поскольку средства проектирования формы могут проигнорировать или переписать изменения, сделанные вами в рамках этого метода.

Работа с базовыми элементами управления

Пространство имен System.Windows.Forms определяет множество "базовых элементов управления", которые можно видеть во многих типичных окнах (это кнопки, надписи, текстовые окна, переключатели и т.д.). Вы, наверное, уже знаете об основных возможностях соответствующих типов, но давайте рассмотрим некоторые наиболее интересные особенности следующих базовых элементов пользовательского интерфейса:

• Label (надпись), TextBox (текстовое окно) и MaskedTextBox (маскированное текстовое окно);

• Button (кнопка);

• CheckBox (кнопка с независимой фиксацией), RadioButton (кнопка с зависимей фиксацией) и GroupBox (групповой блок);

• CheckedListBox (окно отмечаемого списка), ListBox (окно списка) и ComboBox (комбинированное окно).

Освоив работу с этими элементами управления, производными от типа Control, мы с вами обратим внимание на более "экзотические" элементы, такие как MonthCalendar, TabControl, TrackBar, WebBrowser и т.д.

Элемент Label

Элемент управления Label (надпись) может содержать информацию, доступную только для чтения (текст или изображение), например, для того, чтобы пояснить пользователю роль и возможности использования остальных элементов управления, помещенных в форму. Предположим, вы создали в Visual Studio 2005 новый проект Windows Forms с именем LabelsAndTextBoxes. В рамках полученного экземпляра типа Form определите метод с именем CreateLabelControl, который сначала создает и конфигурирует тип Label, а затем добавляет его в коллекцию элементов управления формы,

private void CreateLabelControl {

 // Создание и конфигурация Label.

 Label lblInstructions = new Label;

 lblInstructions.Name = "lblInstructions";

 lblInstructions.Text = ''Введите значения во все окна текста";

 lblInstructions.Font = new Font("Times New Roman", 9.75F, FontStyle.Bold);

 lblInstructions.AutoSize = true;

 lblInstructions.Location = new System.Drawing.Point(16, 13);

 lblInstructions.Size = new System.Drawing.Size(240, 16);

 // Добавление в коллекцию элементов управления формы.

 Controls.Add(lblInstructions);

}

Чтобы увидеть соответствующую подсказку в верхней части главного окна формы, поместите вызов этой вспомогательной функции в конструктор формы.

public MainWindow {

 InitializeComponent;

 CreateLabelControl;

Поделиться с друзьями: