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

Стандартные элементы управления

Событие Scroll генерируется в любом случае взаимодействия пользователя с полосой прокрутки, даже если тот пытается выйти за пределы диапазона. Это событие несет в себе намного больше информации о состоянии полосы прокрутки и действиях пользователя. Если мы подпишемся на это событие, то в обработчик будет передаваться объект ScrollEventArgs с информацией, которая находится в свойствах:

  • OldValue - целое число, равное значению Value перед квантом взаимодействия пользователя с полосой прокрутки (только для чтения)
  • NewValue - целое число, которое примет Value после того, как завершится обработка очередного события Scroll. Если в обработчике события Scroll прописать NewValue=OldValue, то полоса прокрутки не будет реагировать на действия пользователя, поскольку всегда будет возвращаться в исходное состояние. Свойство разрешено читать и писать. Если свойство NewValue изменять программно, то событие ValueChanged не генерируется, поскольку Value напрямую не меняется
  • ScrollOrientation - переменная типа перечисления, которая может иметь одно из двух значений: HorizontalScroll и VerticalScroll. Доступно только для чтения и позволяет различить в общем обработчике события Scroll двух объектов HScrollBar и VScrollBar, от какого именно в обработчик поступила информация
  • Type - это свойство является объектом перечисления ScrollEventType и может иметь одно из следующих 9 значений:
Таблица 15.1 .
- SmallDecrement = 0 Мышь: пользователь щелкнул на верхней (левой) кнопке со стрелкой
Клавиатура: пользователь нажал "стрелку вверх" ("стрелку влево")
- SmallIncrement = 1 Мышь: пользователь щелкнул на нижней (правой) кнопке со стрелкой
Клавиатура: пользователь нажал "стрелку вниз " ("стрелку вправо")
- LargeDecrement = 2 Мышь: пользователь щелкнул на верхней (левой) области между бегунком и кнопкой со стрелкой
Клавиатура: пользователь нажал клавишу PageUp
- LargeIncrement = 3 Мышь: пользователь щелкнул на нижней (правой) области между бегунком и кнопкой со стрелкой
Клавиатура: пользователь нажал клавишу PageDown
- ThumbPosition = 4 Мышь: пользователь отпустил бегунок
- ThumbTrack = 5 Мышь: пользователь захватил бегунок (или перемещает его)
- First = 6 Клавиатура: пользователь нажал клавишу Home
- Last = 7 Клавиатура: пользователь нажал клавишу End
- EndScroll = 8 Прокрутка завершена

Если операционная система сильно загружена и скролируется большой объем информации, то часть событий полосы прокрутки может игнорироваться, но обязательно будет перехвачено последнее событие Scroll с признаком Type=EndScroll и значение Value станет равным NewValue.

Ниже приведен код программы с заблокированной полосой прокрутки ("Хоть видит око, но зуб не ймет" - Крылов, басня)

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);
            // Регистрируем событие Scroll
            vScroll.Scroll += new ScrollEventHandler(vScroll_Scroll);
        }
    
        void vScroll_Scroll(object sender, ScrollEventArgs e)
        {
            // Запрещаем изменение Value
            e.NewValue = e.OldValue;
        }
    
        // На случай изменения размеров формы
        protected override void OnSizeChanged(EventArgs e)
        {
            // Пересчитываем параметры привязки полосы прокрутки
            vScroll.Height = this.ClientSize.Height;
            vScroll.Location = new Point(this.ClientSize.Width - 
					vScroll.Width, 0);
        }
    }
    
    // Запуск
    class Program
    {
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.Run(new MyClass());
        }
    }
}
Листинг 15.3 . Блокировка полосы прокрутки в обработчике события Scroll

Попробуйте запустить эту программу - полоса прокрутки не реагирует на действия пользователя.

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

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

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

 

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