Опубликован: 25.03.2010 | Доступ: свободный | Студентов: 1447 / 158 | Оценка: 4.31 / 4.00 | Длительность: 25:42:00
Лекция 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. Ввожу код на сайте, пишет:

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

 

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