Прошел курс. Получил код Dreamspark. Ввожу код на сайте, пишет: Срок действия этого кода проверки уже истек. Проверьте, правильно ли введен код. У вас осталось две попытки. Вы также можете выбрать другой способ проверки или предоставить соответствующие документы, подтверждающие ваш академический статус.
Как активировать код? |
Стандартные элементы управления
Полосы прокрутки и абстрактный класс ScrollBar
Некоторые элементы управления, которые наследуют класс ScrollableControl, имеют встроенные полосы прокрутки. В одних полосы прокрутки появляются автоматически в случае, когда содержимое элемента выходит за рамки отображаемой области. В других полосы прокрутки включаются в режим постоянного отображения установкой свойства AutoScroll=true.
Полосы прокрутки можно задавать элементам управления и вручную, присоединяя к ним экземпляры классов HScrollBar и VScrollBar, производных от абстрактного класса ScrollBar. Этот абстрактный класс содержит все необходимое для горизонтальной и вертикальной полос прокрутки.
Визуальное представление полосы прокрутки соответствует ее внутреннему состоянию, определяемому некоторой последовательностью целых чисел и позиционированием внутри этой последовательности. Основные характеристики этого ряда целых чисел задаются свойствами
- Minimum - содержит нижнюю границу целых чисел скролируемого диапазона (по умолчанию равно 0)
- Maximum - содержит верхнюю границу ряда целых чисел, определяющих скролируемый диапазон (по умолчанию равно 100)
- SmallChange - определяет шаг изменение свойства Value (или перемещения бегунка, ползунка, указателя полосы прокрутки ) относительно внутреннего числового диапазона, когда пользователь щелкает на стрелках, расположенных по краям полосы прокрутки (по умолчанию равен 1)
- LargeChange - определяет большой шаг перемещения бегунка (изменение свойства Value ) при щелчке пользователем в области между стрелкой и указателем (по умолчанию равен 10) . Эта величина соответствует доле отображаемой области относительно всего числового ряда и определяет размер бегунка на полосе прокрутки, тем самым отражая пропорцию видимой части ко всему документу
- Value - отображает числовое значение внутри скролируемого диапазона, которое представляет текущую позицию бегунка на полосе прокрутки. Оно соответствует верхней границе бегунка при вертикальном расположении, которая, в свою очередь, связана с верхней границей отображаемой области. Фактически Value всегда находится в диапазоне от Minimum до Maximum - LargeChange + 1.
Обычно LargeChange приравнивают к соответствующему размеру отображаемой области документа. Если размер клиентской области меняется в свободно плавающем окне, то величину LargeChange пересчитывают так, чтобы она соответствовала новому размеру видимой области документа. При прокрутке документа операционная система копирует содержимое экрана из одного положения клиентской области в другое, используя при этом упакованные в классы ScrollableControl и ScrollBar системные функции Win32 API: ScrollWindow, ScrollWindowEx, ScrollDC. Каждый раз для прорисовки нового состояния клиентской области при прокрутке автоматически вызывается метод OnPaint().
В классе ScrollBar имеются всего два события: ValueChanged и Scroll. Событие ValueChanged генерируется при изменении значения Value либо программно, либо действиями пользователя. Однако, если значение Value достигло границы числового диапазона, генерация события ValueChanged прекращается. Ниже приведен пример, в котором иллюстрируется обработка события ValueChanged
using System; using System.Drawing; using System.Windows.Forms; namespace Test { // Класс приложения class MyClass : Form { // Создаем вертикальную полосу прокрутки, которую // потом настроим и будем отслеживать VScrollBar vScroll = new VScrollBar(); public MyClass() // Конструктор { // Текст заголовка окна this.Text = "Полоса прокрутки"; // Привязываем к родителю-форме vScroll.Parent = this; // Устанавливаем параметры привязки полосы прокрутки vScroll.Height = this.ClientSize.Height; vScroll.Location = new Point(this.ClientSize.Width - vScroll.Width, 0); // Регистрируем событие vScroll.ValueChanged += new EventHandler(vScroll_ValueChanged); } // На случай изменения размеров формы protected override void OnSizeChanged(EventArgs e) { // Пересчитываем параметры привязки полосы прокрутки vScroll.Height = this.ClientSize.Height; vScroll.Location = new Point(this.ClientSize.Width - vScroll.Width, 0); // Инициируем перерисовку this.Invalidate(); } // Отслеживает действия с полосой прокрутки void vScroll_ValueChanged(object sender, EventArgs e) { // Инициируем перерисовку this.Invalidate(); } // Перегружаем метод OnPaint(), унаследованный от класса Control protected override void OnPaint(PaintEventArgs e) { // Создаем и настраиваем точку привязки текстового блока StringFormat strfrm = new StringFormat(); strfrm.Alignment = StringAlignment.Center;// Центр по горизонтали strfrm.LineAlignment = StringAlignment.Near; // Точка привязки на форме PointF point = new PointF(this.ClientSize.Width / 2, vScroll.Value * this.ClientSize.Height / vScroll.Maximum); // Рисуем текст Graphics gr = e.Graphics;// Контекст экрана gr.DrawString("Value=" + vScroll.Value.ToString(), // Выводимый текст new Font("Arial", 14, FontStyle.Bold), // Устанавливаем шрифт new SolidBrush(Color.Red), // Цвет шрифта point, // Точка привязки на форме strfrm); // Передаем точку привязки текстового блока } } // Запуск class Program { static void Main() { Application.EnableVisualStyles(); Application.Run(new MyClass()); } } }Листинг 15.2 . Применение вертикальной полосы прокрутки