Опубликован: 25.03.2010 | Доступ: свободный | Студентов: 1447 / 157 | Оценка: 4.31 / 4.00 | Длительность: 25:42:00
Лекция 16:

Динамическая компоновка формы

Привязка дочерних элементов (свойство Anchor - якорь)

Свойство Anchor замораживает расстояние дочернего элемента управления от соответствующего края родительского контейнера при изменении размеров последнего. Это свойство может принимать одно из значений или их побитовую комбинацию перечисления AnchorStyles, приведенного в таблице

Таблица 16.2 . Значения перечисления 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

Вот результат


Если в этой программе интерактивно изменять ширину формы, то ширина полей также будет меняться, поскольку они привязаны справа.

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

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

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

 

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