Опубликован: 25.03.2010 | Уровень: для всех | Доступ: платный
Лекция 13:

Класс Control и стандартные элементы управления (обзор)

  • Заполните файлы следующим кодом
using System;
using System.Windows.Forms;
    
namespace MyProject
{
    class MainForm : Form
    {
        const int MAX_BUTTON = 5;   // Число кнопок
    
        public MainForm()
        {
            // Настраиваем консольное окно
            Console.ForegroundColor = ConsoleColor.White;
    
            // Регистрируем событие загрузки формы
            this.Load += new EventHandler(MainForm_Load);
        }
    
        // Создаем элементы управления в обработчике события Load формы
        void MainForm_Load(object sender, EventArgs e)
        {
            // Создаем кнопки
            for (int i = 0; i < MAX_BUTTON; i++)
            {
                Button btn = new Button();  // Создали кнопку
                this.Controls.Add(btn);// Отдали кнопку форме
            }
            Console.WriteLine("Создано кнопок: 
    {0}", this.Controls.Count);
    
            // Уничтожаем кнопки
            int count = 0; // Локальная переменная
            Control[] control = new Control[this.Controls.Count];
            // Проводим предварительное обследование коллекции в foreach
            foreach (Control ctrl in this.Controls)
            {
                if (ctrl is Button)
                {
                    control[count] = ctrl;// Сохраняем ссылку в массиве
                    count++;
                }
            }
            // Уничтожаем кнопки по найденым ссылкам
            for (int i = 0; i < count; i++)
                this.Controls.Remove(control[i]);
            Console.WriteLine("Удалено кнопок: {0}", count);
    
            // Еще раз создаем кнопки
            for (int i = 0; i < MAX_BUTTON + 1; i++)
            {
                Button btn = new Button();  // Создали кнопку
                btn.Parent = this;  // Отдали форме другим способом
            }
            Console.WriteLine("\nСоздано кнопок: 
    {0}", this.Controls.Count);
    
            // Уничтожаем кнопки
            count = 0;  // Сбросили счетчик
            control = new Control[this.Controls.Count];// Переназначили массив
            // Проводим предварительное обследование коллекции в for
            for (int i = 0; i < this.Controls.Count; i++)
            {
                Control ctrl = this.Controls[i];
                if (ctrl is Button)
                {
                    control[count] = ctrl;
                    count++;
                }
            }
            // Уничтожаем кнопки по найденым ссылкам
            for (int i = 0; i < count; i++)
                control[i].Parent = null;// Уничтожаем другим способом
            Console.WriteLine("Удалено кнопок: {0}", count);
    
            for (int i = 0; i < MAX_BUTTON + 2; i++)
            {
                Button btn = new Button();  // Создали кнопку
                btn.Click += btn_Click;// Зарегистрировали общий обработчик
                btn.Parent = this;  // Отдали форме
            }
            Console.WriteLine("\nСоздано кнопок: 
    {0}", this.Controls.Count);
        }
    
        // Уничтожение кнопок интерактивно
        int count = 0; // Поле
        void btn_Click(object sender, EventArgs e)
        {
            this.Controls.Remove((Control)sender);
            Console.WriteLine("{0}) Удалили кнопку 
    щелчком на ней", ++count);
        }
    }
}
Листинг 13.1 . Код файла MainForm.cs

using System;
using System.Windows.Forms;
    
namespace MyProject
{
    class EntryPoint
    {
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.Run(new MainForm());
        }
    }
}
Листинг 13.2 . Код файла Program.cs

Результат работы приведенного кода будет таким


Поскольку все элементы управления произошли от класса Control, а он определяет свойство Controls, то любой элемент управления имеет это родительское свойство и может быть родителем. Но не многие наследники Control используются программистами в качестве родителей. Обычно элементы управления используются в качестве дочерних элементов формы.

Class Control имеет булево свойство TabStop, которое позволяет контейнерным элементам управлять фокусом ввода своих дочерних элементов с помощью клавиши Tab. Фокус ввода способны получать только те дочерние объекты, у которых свойство TabStop установлено в true. Порядок получения фокуса определяется свойством Control.TabIndex дочерних элементов контейнера или выполняется в порядке их расположения в коллекции (в порядке их добавления в набор, Z -порядок: последний добавленный видится верхним). Элемент управления сдвигается в Z -последовательности на первое или последнее место своими методами BringToFront() или SendToBack() соответственно.


Дочерние элементы управления одного контейнера (родителя) называются родственными.

По умолчанию все элементы управления рождаются видимыми и доступными пользователю. Видимость элемента управления определяется свойством Visible, а доступность - Enabled. Те же свойства родителя (контейнера) влияют сразу на все дочерние элементы. Невидимым или недоступным элемент становится только для пользователя, но в составе программы остается полноценным элементом и продолжает работать под ее контролем.

Максим Филатов
Максим Филатов

Прошел курс. Получил код Dreamspark. Ввожу код на сайте, пишет:

Срок действия этого кода проверки уже истек. Проверьте, правильно ли введен код. У вас осталось две попытки. Вы также можете выбрать другой способ проверки или предоставить соответствующие документы, подтверждающие ваш академический статус.

 

Как активировать код?

Денис Пашков
Денис Пашков
Россия
Татьяна Ковалюк
Татьяна Ковалюк
Украина, Киев, Киевский политехнический институт, 1974