|
Прошел курс. Получил код 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 .
Применение вертикальной полосы прокрутки
