|
Прошел курс. Получил код Dreamspark. Ввожу код на сайте, пишет: Срок действия этого кода проверки уже истек. Проверьте, правильно ли введен код. У вас осталось две попытки. Вы также можете выбрать другой способ проверки или предоставить соответствующие документы, подтверждающие ваш академический статус.
Как активировать код? |
Динамическая компоновка формы
Панели и контейнеры
Все потомки класса Control наследуют от него свойство Controls, в котором можно хранить ссылки на дочерние элементы управления. Иными словами, любой элемент управления способен быть контейнером других элементов. Но обычно в качестве контейнеров выступают такие элементы, как формы и панели. Именно они компонуют пользовательский интерфейс.
Далее рассмотрим избранную иерархию классов, связанную с решением задачи динамического размещения элементов интерфейса:
Стыковка дочерних элементов (свойство Dock)
Стыковка элементов управления в клиентской области родителя обеспечивается значением их свойства Dock, которое ожидает одно из значений перечисления System.Windows.Forms.DockStyle:
| None = 0 | Нестыкуемая (по умолчанию) |
| Top = 1 | Пристыковать сверху |
| Bottom = 2 | Пристыковать снизу |
| Left = 3 | Пристыковать слева |
| Right = 4 | Пристыковать справа |
| Fill = 5 | Развернуть на всю клиентскую область |
Если контейнер содержит несколько элементов управления и если в одном из них свойству Dock присвоено значение, отличное от None, то и другим элементам нужно присвоить отличное от None значение. И только один элемент может иметь значение Fill. Иначе элементы будут перекрываться.
Дочерние элементы в контейнере выстраиваются в Z -последовательность в порядке их добавления в контейнер с помощью свойства Parent самого элемента управления или методом Controls.Add() контейнера. В таком же порядке они и отображаются. Изменить место элемента в Z -последовательности можно методами BringToFront() и SendToBack(). Если элементы Z -последовательности перекрываются, то элемент с меньшим индексом будет располагаться сверху.
Если элементы пристыковываются к одному краю контейнера, то каждый новый добавленный в контейнер элемент будет пристыковываться непосредственно к краю, оттесняя к центру клиентской области контейнера ранее пристыкованные к этому краю элементы. Поэтому вначале нужно дабавить к контейнеру элемент с параметром Dock=Fill, а потом пристыковывать элементы к краям родителя.
Вот простая программа, иллюстрирующая размещение элементов управления в зависимости от порядка их добавления в родительский контейнер.
using System;
using System.Drawing;
using System.Windows.Forms;
namespace Test
{
// Класс приложения
class MyClass : Form
{
public MyClass()
{
this.Text = "Схематичный Блокнот";
// Создаем многострочный TextBox
TextBox textBox = new TextBox();
textBox.Parent = this;
textBox.Multiline = true;
textBox.Dock = DockStyle.Fill;// Добавляется первым
// Создаем объект дерева
TreeView tree = new TreeView();
tree.Parent = this;// Один способ
tree.Dock = DockStyle.Left;// Оттесняет первого слева
tree.Nodes.Add("tree");// Добавили узел
// Создаем панель инструментов
ToolStrip tool = new ToolStrip();
this.Controls.Add(tool);// Другой способ
tool.Items.Add("tool");// Оттесняет другие сверху
// Создаем меню
MenuStrip menu = new MenuStrip();
this.Controls.Add(menu);// Другой способ
menu.Items.Add("menu");// Оттесняет другие сверху
// Создаем панель состояния
StatusStrip status = new StatusStrip();
status.Parent = this;// Один способ
status.Items.Add("status");// Оттесняет другие снизу
}
}
// Запуск
class Program
{
static void Main()
{
Application.EnableVisualStyles();
Application.Run(new MyClass());
}
}
}
Листинг
16.3 .
Иллюстрация порядка размещения элементов
Результат выполнения такой
Красными цифрами показаны индексы элементов в коллекции Form.Controls, соответствующие порядку их добавления. Если в коде изменить порядок добавления элементов управления в контейнер формы, то размещение элементов станет другим.

