Опубликован: 25.03.2010 | Уровень: для всех | Доступ: платный
Лекция 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. Ввожу код на сайте, пишет:

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

 

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

Денис Пашков
Денис Пашков
Россия
Татьяна Ковалюк
Татьяна Ковалюк
Украина, Киев, Киевский политехнический институт, 1974