private TextBox firstNameBox = new TextBox();
private Button btnShowControls = new Button();
public MainWindow() {
// Конфигурация формы.
this.Text = "Простые элементы управления";
this.Width = 300;
this.Height = 200;
CenterToScreen();
// Добавление в форму нового текстового окна.
firstNameBox.Text = "Привет";
firstNameBox.Size = new Size(150, 50);
firstNameBox.Location = new Point(10, 10);
this.Controls.Add(firstNameBox);
// Добавление в форму новой кнопки.
btnShowControls.Text = "Щелкните здесь";
btnShowControls.Size = new Size(90, 30);
btnShowControls.Location = new Point(10, 10);
btnShowControls.BackColor = Color.DodgerBlue;
btnShowControls Click += new EventHandler(btnShowControls_Clicked);
this Controls.Add(btnShowControls);
}
// Обработка события Click кнопки.
private void.btnShowControls_Clicked(object sender, EventArgs e) {
// Вызов ToString() для каждого элемента управления
// из коллекции Controls формы.
string ctrlInfo = "";
foreach (Control c in this.Controls) {
ctrlInfo += string.Format.("Элемент: {0}\n:", s.ToString());
}
MessageBox.Show(ctrlInfo, "Элементы управления, помещенные в форму");
}
}
}
Добавьте в пространство имен ControlsByHand еще один класс, реализующий метод Main() программы.
class Program {
public static void Main(string[] args) {
Application.Run(new MainWindow());
}
}
Теперь скомпилируйте полученный файл C# в командной строке, используя следующую команду.
csc /target:winexe *.cs
Запустив приложение и щелкнув на кнопке формы, вы увидите окно сообщения, в котором будет представлен список всех элементов, помещенных в эту форму (рис. 21.1).
Рис. 21.1. Взаимодействие с коллекцией элементов управления формы
Тип Control.ControlCollection
Процедура добавления нового элемента в форму исключительно проста, но свойство Controls требует дополнительного обсуждения. Это свойство возвращает ссылку на вложенный класс с именем ControlCollection, определенный в рамках класса Control. Вложенный тип ControlCollection содержит все элементы управления, помещенные в данную форму. Вы можете получить ссылку на эту коллекцию, чтобы "рассмотреть список" дочерних элементов формы.
// Получение доступа к вложенной коллекции 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).
Читать дальше