Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Троелсен Э. Язык программирования С# 2010 и п...docx
Скачиваний:
113
Добавлен:
21.09.2019
Размер:
6.92 Mб
Скачать

Добавление элементов управления в форму вручную

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

Чтобы рассмотреть процесс добавления элементов управления в форму, давайте начнем с построения типа Form без помощи мастеров, используя только текстовый редактор и компилятор командной строки C#. Создайте новый файл C# с именем ControlsByHand.cs и добавьте в этот файл следующий программный код, определяющий новый класс MainWindow.

using System;

using System.Drawing;

using System.Windows.Forms;

namespace ControlsByHand {

 class MainWindow: Form {

  // Члены-переменные элементов формы.

  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.