|
Прошел курс. Получил код Dreamspark. Ввожу код на сайте, пишет: Срок действия этого кода проверки уже истек. Проверьте, правильно ли введен код. У вас осталось две попытки. Вы также можете выбрать другой способ проверки или предоставить соответствующие документы, подтверждающие ваш академический статус.
Как активировать код? |
Динамическая компоновка формы
Привязка дочерних элементов (свойство Anchor - якорь)
Свойство Anchor замораживает расстояние дочернего элемента управления от соответствующего края родительского контейнера при изменении размеров последнего. Это свойство может принимать одно из значений или их побитовую комбинацию перечисления AnchorStyles, приведенного в таблице
| None = 0 (00000000) | Нет привязки (по умолчанию) |
| Top = 1 (00000001) | Привязать к верхнему краю контейнера |
| Bottom = 2 (00000010) | Привязать к нижнему краю контейнера |
| Left = 4 ((00000100) | Привязать к левому краю контейнера |
| Right = 8 (00001000) | Привязать к правому краю контейнера |
Свойство Anchor класса Control является аниподом свойства Dock. Когда присваивается одному свойству значение, отличное от None, автоматически сбрасывается в значение None другое свойство.
По умолчанию свойство Anchor имеет значение AnchorStyles.Top | AnchorStyles.Left. Если добавить в дочерний элемент к значению Anchor по умолчанию еще AnchoStyles.Right, то при изменении размеров контейнера зазор слева, сверху и справа между элементом и контейнером будет заморожен.
Приведем пример, в котором на форме расположим 4 текстовых поля с метками. Текстовые поля привяжем к трем сторонам контейнера, кроме нижней.
using System;
using System.Drawing;
using System.Windows.Forms;
namespace Test
{
// Класс приложения
class MyClass : Form
{
int y; // Вынесено в поле класса для видимости в обработчике
public MyClass() // Конструктор
{
this.Text = "Привязка Anchor";
int iSpace = Font.Height;// Интерлиньяж
y = iSpace;// Позиционирование по вертикали
string[] fieldInfo = new string[] {
"Фамилия:",
"Имя:",
"Адрес:",
"Профессия:"
};
// Создаем и настраиваем объекты
for (int i = 0; i < fieldInfo.Length; i++)
{
Label lbl = new Label();
lbl.Parent = this;
lbl.AutoSize = true;
lbl.Text = fieldInfo[i];
lbl.Location = new Point(iSpace, y);
TextBox txtBox = new TextBox();
txtBox.Parent = this;
txtBox.Location = new Point(lbl.Right + iSpace, y);
int width = this.ClientSize.Width -
iSpace - txtBox.Left;
txtBox.Size = new Size(width, txtBox.Height);
txtBox.Anchor |= AnchorStyles.Right;
y = txtBox.Bottom + iSpace;// Сдвиг по вертикали
}
// Подстраиваем форму
this.ClientSize = new Size(this.ClientSize.Width, y);
// Убираем системные кнопки
this.MaximizeBox = false;
this.MinimizeBox = false;
}
// Блокируем изменение высоты формы
protected override void OnResize(EventArgs e)
{
base.OnResize(e);
this.ClientSize = new Size(this.ClientSize.Width, y);
}
}
// Запуск
class Program
{
static void Main()
{
Application.EnableVisualStyles();
Application.Run(new MyClass());
}
}
}
Листинг
16.6 .
Применение свойства Anchor
Вот результат
Если в этой программе интерактивно изменять ширину формы, то ширина полей также будет меняться, поскольку они привязаны справа.
