Как называется полоса прокрутки в visual studio
До сих пор мы рассказывали о том, как начать работу с системой Visual Studio 2013 и как удобно настроить интегрированную систему разработки. Далее мы научим вас эффективно использовать некоторые встроенные команды, комбинации клавиш, а также вспомогательные инструментальные окна. Это поможет вам писать программы и проектировать формы.
Разработчики проводят значительное время, работая над текстами программ. Следовательно, очень важно уметь правильно скомпоновать код и перемещаться по его тексту. В системе Visual Studio 2013 реализован совершенно новый редактор кода, основанный на платформе визуализации WPF (Windows Presentation Foundation). Он предоставляет разработчикам множество новых возможностей в дополнение к тем, которые были унаследованы от предыдущих версий системы.
Компоновка окна редактора кода
Открывая исходный файл для редактирования, вы работаете с окном редактора кода, показанным на рисунке ниже. Основой этого окна является окно кода, в котором отображается текст программы:
Над окном кода расположены два раскрывающихся списка, которые помогут вам перемещаться по файлу кода. В первом из этих списков перечислены классы, содержащиеся в файле кода, а во втором — члены класса, выбранного из первого списка. Классы и их члены перечислены в алфавитном порядке. Это облегчает поиск метода или определения члена класса в файле.
Когда вы редактируете программу в окне редактора кода, строки кода, которые были модифицированы с момента открытия файла, сопровождаются метками в левом поле — желтыми для несохраненных изменений и зелеными для сохраненных.
Регионы кода
Использование частичных классов (т.е. классов, определение которых разбросано по нескольким файлам) позволяет в ходе проектирования записывать код в физически разные файлы, которые в совокупности представляют собой логически единый класс. Преимущество использования отдельных файлов заключается в эффективном группировании всех связанных друг с другом методов, например, методов, реализующих интерфейс. В то же время эта стратегия имеет недостаток: перемещение по коду требует постоянного переключения между его файлами.
Не обязательно разворачивать регион, чтобы увидеть код, который в нем записан. Просто переместите курсор мыши над регионом; и вы увидите код в контекстном окне указателя.
Сворачивание кода
Кроме регионов, которые необходимо определять вручную, в системе Visual Studio 2013 есть структуры кода (outlines), позволяющие автоматически сворачивать методы, комментарии и определения классов. Режим автоматического сворачивания включен по умолчанию. Если он был отключен, то его можно снова включить с помощью команды Edit --> Outlining --> Start Automatic Outlining.
На рисунке ниже показаны четыре сворачиваемых региона. Один из них называется Constructor, а остальные три автоматические структуры кода позволяют свернуть класс, XML-комментарии и метод конструктора (который был сжат). Автоматические структуры можно сворачивать и разворачивать так же, как и регионы, которые определяются вручную.
Меню Edit --> Outlining содержит большое количество команд, помогающих переключать режимы сворачивания, то сжимая весь файл до определений методов и свойств (Edit --> Outlining --> Collapse to Definitions), то разворачивая все свернутые фрагменты кода вновь (Edit --> Outlining --> Stop Outlining). Другой способ разворачивать и сворачивать регионы основан на использовании комбинации клавиш , . Эта комбинация позволяет переключаться между двумя режимами.
Форматирование кода
Режим Smart Indenting в системе Visual Studio практически всегда прекрасно справляется с автоматическим выравниваем кода по мере его ввода или вставки в окно редактора кода, но иногда встречаются плохо отформатированные фрагменты кода, которые трудно читать. Для того чтобы система Visual Studio переформатировала весь документ и установила позиции фигурных скобок и отступов строк, выберите команду Edit --> Advanced --> Format Document или нажмите комбинацию клавиш , . Для того чтобы переформатировать только что выделенный блок кода, выберите команду Edit --> Advanced --> Format Selection или нажмите комбинацию клавиш , .
Вы могли заметить, что команды Tabify/Untabify Selected Lines в меню Edit --> Advanced сильно отличаются от команды Format Selection. Эти команды превращают ведущие пробелы в символы табуляции, и наоборот, а не вычисляют заново отступы, как это делает команда Format Selection.
Перемещение вперед и назад по коду
Когда вы перемещаетесь по элементам интерфейса и между ними, система Visual Studio 2013 отслеживает вашу позицию почти так же, как веб-браузер отслеживает сайты, которые вы посетили. Используя команды Navigate Forward и Navigate Backward из меню View, вы сможете легко перемещаться вперед и назад между разными элементами проекта, в которые внесли изменения. Для перемещения назад используется комбинация клавиш , а для перемещения вперед - .
Дополнительные свойства редактора кода
Редактор кода в системе Visual Studio имеет очень много возможностей, которые трудно исчерпывающим образом описать в этой статье. Однако наиболее полезные из них мы приводим ниже.
Подсветка ссылок
Подсветка ссылок - интересное свойство системы Visual Studio, которое появилось в версии 2010. Система выделяет все вхождения имени элемента кода в области видимости (например, имени метода или свойства), на которое указывает курсор. Благодаря этому легче будет найти места, где это имя еще используется в коде. Вы сможете легко перемещаться между этими местами с помощью комбинации клавиш .
Укрупнение кода
С помощью комбинации можно увеличивать и уменьшать масштаб кода (по существу, увеличивая и уменьшая текст). Это свойство может оказаться особенно полезным, когда необходимо продемонстрировать код группе людей. В левом нижнем углу окна редактора кода есть раскрывающийся список, позволяющий выбрать заранее заданные уровни увеличения текста.
Сворачивание текста
Чтобы включить опцию сворачивания текста в окне редактора кода, выберите команду Tools --> Options, откройте узел Text Editor, выберите подузел All Languages и установите флажок Word Wrap. Можете также отобразить глиф стрелки возврата (return arrow) в том месте, где текст должен быть свернут, установив флажок Show Visual Glyphs for Word Wrap, расположенный ниже флажка Word Wrap.
Чтобы применить эти установки к текущему проекту, выберите команду Edit --> Advanced --> Word Wrap.
Номера строк
Для того чтобы отслеживать положение курсора в файле, полезно пронумеровать строки в окне редактора кода. Для того чтобы включить режим нумерации строк, выберите команду меню Tools --> Options, откройте узел Text Editor, выберите узел All Languages и установите флажок Numbers:
Разделение окна
Иногда нужно разделить один и тот же файл кода на две части и просматривать одновременно в разных окнах. Можете разделить активное окно редактора на верхнюю и нижнюю части с помощью линии разбивки (splitter bar). Эти окна можно прокручивать независимо друг от друга и отображать в них содержимое одного и того же файла в одно и то же время.
Для того чтобы разделить окно редактора кода, выберите команду Split из меню Window. В качестве альтернативы можно перетащить метку манипулятора (расположенную прямо над панелью вертикальной прокрутки), в позицию, где должна располагаться линия разбивки.
Чтобы настроить размеры каждого окна, достаточно передвинуть линию разбивки вверх или вниз. Удалить линию разбивки просто: дважды щелкните на ней или выберите команду Remove Split из меню Window.
Свободное перемещение окон редактора кода
В версии Visual Studio 2010 появилось новшество, которого долго ожидали программисты, работающие с несколькими дисплеями, - возможность "освобождать" окна редактора кода (и инструментальные окна) и перемещать их за пределы главного окна системы Visual Studio (как показано на рисунке ниже) и даже на другой дисплей. Это позволяет одновременно работать с несколькими окнами редактора кода, расположенными на разных дисплеях. Для того чтобы освободить окно, сначала убедитесь, что оно находится в фокусе, а затем выберите команду Float из окна Window. В качестве альтернативы можно щелкнуть правой кнопкой мыши на заголовке окна и выбрать команду Float из контекстного меню или щелкнуть и перетащить закладку для этого окна (при этом окно освобождается) и перетащить его в то место, где вы хотите его расположить.
Когда разделение окна редактора кода на две части для одновременного просмотра разных фрагментов одного и того же файла (см. предыдущий раздел) оказывается неудобным, можно вместо этого использовать плавающее окно, разместив его, например, на другом дисплее (если вы работаете с несколькими дисплеями). Для этого можно воспользоваться специальным трюком (поскольку двойной щелчок мышью на файле в окне Solution Explorer просто активизирует существующее окно редактора кода для данного файла) - выбрать команду New Window в меню Window. Эта команда откроет просматриваемый в данный момент файл в новом окне, которое можно сделать свободным и разместить в любом месте.
Создание групп закладок
Если у вас нет нескольких мониторов, то все равно есть возможность открыть одновременно несколько окон редактора кода. Для этого следует создать группы закладок и создать из них мозаику, чтобы отобразить одновременно. Каждая закладка окна редактора кода в этой группе отображается как отдельный элемент мозаики. Таким образом, можно создать несколько групп закладок. Их количество ограничено лишь размерами экрана, на котором они должны размещаться. Элементы мозаики можно размещать как вертикально, так и горизонтально, правда, применить эти два способа одновременно невозможно.
Для того чтобы начать этот процесс, откройте в окне редактора кода несколько закладок. Убедитесь, что закладка окна редактирования кода находится в фокусе, а затем выберите команду Window --> New Horizontal Tab Group или Window --> New Vertical Tab Group из открывшегося меню. В результате будет создана новая группа закладок и мозаика для них:
В качестве альтернативы можно просто перетащить закладку вниз или за существующую и прикрепить ее в этой позиции, получив тот же самый результат. Можно также перетаскивать закладки из одной группы закладок в другую, используя команды Window --> Move to Next Tab Group и Window --> Move to Previous Tab Group. Эти команды доступны также в меню, которое открывается после щелчка правой кнопкой мыши на закладке. Для того чтобы восстановить пользовательский интерфейс, имеющий только одну группу закладок, переместите закладки из новой группы (или групп) закладок назад в исходное место, и мозаика исчезнет.
Несколько панелей Solution Explorer
Если вы работаете на нескольких мониторах, то в версиях Visual Studio 2008 и ниже вы могли заметить, что нельзя открыть несколько панелей Solution Explorer. В Visual Studio 2013 этого ограничения не существует. Щелкните на одном из элементов в окне Solution Explorer правой кнопкой мыши и выберите в контекстном меню команду New Solution Explorer view. При выборе этой команды откроется новое окно Solution Explorer, которое будет содержать выбранный элемент. Это очень удобно при работе на нескольких мониторах.
Дополнительные возможности
Для того чтобы достичь действительно высокой производительности труда, полезно знать о многочисленных скрытых возможностях редактора кода, которые позволяют сэкономить массу времени. Рассмотрим некоторые из наиболее полезных команд, которые скрыты в редакторе кода.
"Закомментирование" и "раскомментирование" блока кода
В системе Visual Studio есть простое средство для "закомментирования" и "раскомментирования" блоков. Для этого следует выделить блок, затем выбрать команду Edft --> Advanced --> Comment Selection, чтобы "закомментировать" его, или Edit --> Advanced --> Uncomment Selection, чтобы "раскомментировать" его. Проще всего выбрать эти команды (скорее всего, именно их вы будете чаще всего использовать) с помощью комбинаций клавиш. Нажмите комбинации клавиш , , чтобы "закомментировать" блок кода, и , - чтобы "раскомментировать" его. Еще одним простым средством для доступа к этим командам является инструментальная панель Text Editor.
Выделение блока
Выделение блока, которое называют также выделением окна (box selection), столбца (column selection), прямоугольника (rectangle) или вертикального текста (vertical text selection), как показано на рисунке ниже, подразумевает выделение текстового блока, а не строк (процедура, которая называется выделением потока (stream selection)). Для того чтобы отметить текстовый блок, нажмите клавишу и не отпускайте ее, пока выделяете текст мышью, или используйте комбинацию клавиш . Это свойство может оказаться полезным, когда необходимо удалить часть вертикально выровненного кода (например, префикс в объявлениях переменных):
Многострочное редактирование
Многострочное редактирование - это новое свойство, появившееся в системе Visual Studio 2010 и расширяющее возможность выделения блоков. В предыдущих версиях системы после выделения вертикального текстового блока вы могли только удалять, вырезать или копировать блок. Теперь в системе Visual Studio после выделения вертикального текстового блока можно в каждой строке набрать текст, который заменит выделенный фрагмент. Это удобно, например, когда требуется заменить уровень доступа к группе переменных с private на protected.
Можно также вставить текст одновременно в несколько строк, создав блок с нулевой шириной и просто начав печатать.
Кольцевой буфер обмена
Система Visual Studio отслеживает последние двадцать фрагментов текста, которые были скопированы или вырезаны в буфер обмена. Для того чтобы вставить текст, который был ранее скопирован в буфер обмена, но был перезаписан, вместо обычной комбинации , предназначенной для вставки, можно использовать комбинацию . Нажав клавишу и удерживая клавиши , можно выполнять циклы просмотра элементов буфера обмена.
Полноэкранный режим
Можете максимизировать представление кода, подлежащего редактированию, выбрав команду View --> Full Screen или нажав комбинацию клавиш , чтобы увеличить до максимума окно редактора кода, скрыв другие инструментальные окна и панели. Для того чтобы вернуться в обычный режим, снова нажмите комбинацию клавиш или щелкните на кнопке переключения Full Screen, добавленной в конце панели меню.
Переход к определению
Для того чтобы быстро перейти к определению класса, метода или члена, расположенного ниже курсора, щелкните правой кнопкой мыши и выберите команду Go То Definition или нажмите клавишу .
Поиск всех ссылок
В системе Visual Studio 2013 есть возможность найти точку вызова метода или ссылки на свойство, щелкнув правой кнопкой мыши на его определении и выбрав команду Find All References в контекстном меню или поместив курсор на определение метода и нажав комбинацию клавиш . Эти команды открывают инструментальное окно Find Symbol Results, содержащее позиции, в которых существуют ссылки на указанный метод или свойство. Теперь можно дважды щелкнуть на ссылке в окне результатов, чтобы переместиться на искомую позицию в окне редактирования кода.
Это свойство несколько устарело после появления нового окна Call Hierarchy, которое будет рассмотрено позже. Однако оно по-прежнему позволяет быстро находить используемый метод без перемещения по окну Call Hierarchy.
Компания Microsoft считает, что Visual Studio - это инструмент повышения производительности для разработчиков, а не только место, где можно редактировать код. Поэтому Visual Studio содержит в себе огромный функционал для оказания помощи разработчикам. Visual Studio 2013 призвана помочь разработчикам писать более эффективный и открытый код. Эта статья описывает некоторые из этих функций.
Описание кода
Когда вы исследуете код, зачастую необходимо быстро ознакомиться с реализацией вызываемого метода. Если вы щелкните правой кнопкой мыши по имени вызываемого метода и выберите в контекстном меню команду Go to Definition, Visual Studio откроет файл с реализацией данного метода. Однако, файл, который вы редактировали, окажется уже не в фокусе. Это конечно не непреодолимая проблема, но это неудобно.
Команда Peek Definition позволяет разработчикам просматривать определение метода, не выходя из контекста текущей области редактирования. Чтобы убедиться в этом, щелкните правой кнопкой мыши по имени метода и выберите в контекстном меню команду Peek Definition:
Помимо просмотра кода реализации, команда Peek Definition позволяет редактировать его. Наведя курсор мыши на метод в окне кода реализации, вы можете щелкнуть правой кнопкой мыши и выбрать Peek Definition, чтобы углубиться в реализации перегруженных версий этого метода или определения других методов. Когда вы углубляетесь более чем на один уровень, появляется коллекция белых и синих кружочков, позволяющих перемещаться вперед и назад по иерархии вызовов:
Если вы хотите переместить окно Pick Window (с определением метода), можете использовать значок в закладке с именем файла, справа от названия файла.
Расширенные возможности полосы прокрутки
Расширенная полоса прокрутки - это один из наиболее популярных визуальных компонентов Visual Studio Productivity Power Tools, показывающий информацию о файле, который в данный момент редактируется. С помощью полосы прокрутки можно легко увидеть в каком месте кода находятся ошибки и предупреждения, точки останова, закладки и результаты поиска. На рисунке ниже показаны некоторые цветные маркеры полосы прокрутки:
В разделе Behaviour переключатель позволяет выбрать режим вертикальной полосы прокрутки: бар (по умолчанию) или карта. В режиме карты вы можете включить подсказки при просмотре. На рисунке ниже показана полоса прокрутки в режиме карты:
Исходный код в карте полосы прокрутки предназначен для обеспечения высокого уровня визуального представления кода при редактировании файла, т.е. вы не должны разобрать сам код, а должны просто увидеть его наглядную структуру в документе. Цель этого режима полосы прокрутки заключается в визуальной помощи при навигации по документы с большим объемом кода.
При наведении курсора на полосу прокрутки в режиме Map, слева от курсора отображается всплывающая подсказка с информацией о коде, который располагается в данной части документа:
Идея заключается в удобной функции предварительного просмотра, чтобы вы смогли найти нужный код, не используя при этом прокрутку документа.
Navigate To
Команда Navigate То - мощный инструмент поиска в системе Visual Studio, появившийся в версии 2010 и обеспечивающий альтернативу стандартным функциям поиска символов. Как и команда Find Symbol, команда Navigate То ограничена лишь поиском символов; для того чтобы оценить ее полезность, следует рассмотреть большое количество отличий между нею и командой Find Symbol.
В противоположность команде Find Symbol команда Navigate То выводит результаты по мере того, как пользователь вводит поисковый запрос. Чем больше текста запроса набрано, тем уже становится множество результатов. Дважды щелкнув на одном из результатов, пользователь может закрыть диалоговое окно и перейти к этому результату.
Одно из наиболее важных свойств команды Navigate То заключается в том, как именно она выполняет поиск. Допустим, пользователь ищет метод класса ProductSummary. В этом инструменте поиска пробелы, по существу, играют роль оператора AND, поэтому в ответ на запрос "prod sum" (т.е. на поиск имен prod и sum в одном и том же модуле) команда возвращает класс ProductSummary точно так же, как в ответ на запрос sum prod.
В предыдущих версиях Visual Studio команда Navigate То открывала одноименное модальное окно для поиска. Такой подход является неудобным и отрывает программиста от рабочего процесса написания кода. В Visual Studio 2013 эта команда получила гибкий графический интерфейс. Для запуска поиска Navigate То можно использовать горячие клавиши Ctrl+, или команду меню Edit --> Navigate To, при этом откроется маленькое плавающее окно справа вверху:
Когда вы начинаете вводить символы в строке панели Navigate То, Visual Studio использует семантический поиск для отображения списка совпадений. Другими словами, вместо простого текстового поиска, Visual Studio использует свое понимание классов и методов в коде проекта в качестве релевантного поиска. Клавиша Esc закрывает окно навигации и позволяет вернуться в исходное положение.
Другое уникальное свойство команды Navigate То заключается в том, что она выполняет поиск, используя "верблюжий стиль". Для того чтобы найти класс ProductSummary, можно набрать в запросе PS (прописные буквы из имени), чтобы получить искомый метод в качестве результата - очень мощное свойство, доступное только в этом инструменте поиска.
Когда вы работаете с длинными файлами кода, может быть трудно запомнить расположение элементов в файле. Вы можете настроить полосу прокрутки в редакторе кода, чтобы лучше понимать, что происходит в коде.
Заметки
Можно выбрать, должны ли на полосе прокрутки отображаться заметки, такие как изменения в коде, точки останова, закладки, ошибки и положение курсора.
Откройте страницу параметров Полосы прокрутки. Для этого последовательно выберите Средства > Параметры > Текстовый редактор > Все языки > Полосы прокрутки.
Установите флажок Показывать примечания над вертикальной полосой прокрутки, а затем выберите нужные заметки. Доступны следующие заметки:
- изменения
- метки
- ошибки
- положение курсора.
Параметр Показывать метки включает точки останова и закладки.
Посмотрите, как он работает. Для этого откройте большой файл кода и замените любой текст, который повторяется в нескольких местах в файле. На полосе прокрутки отображаются результаты замены, поэтому вы сможете отменить операцию, если изменили что-то не то.
Вот как выглядит полоса прокрутки после поиска строки. Обратите внимание, что все экземпляры строки отображаются на полосе прокрутки.
Вот как выглядит полоса прокрутки после замены всех экземпляров строки. Красные метки на полосе прокрутки обозначают места, где из-за изменения текста появились ошибки.
Режимы отображения
У полосы прокрутки есть два режима: режим полосы и режим карты.
Режим полосы
В режиме полосы индикаторы заметок отображаются на полосе прокрутки. Если щелкнуть полосу прокрутки, вместо перехода к определенному месту в файле страница будет прокручена вверх или вниз.
Режим карты
В режиме карты показано миниатюрное изображение строк кода на полосе прокрутки. Вы можете задать ширину столбца карты, выбрав определенное значение для параметра Обзор исходного кода. Чтобы при наведении указателя на карту отображалось более широкое окно предварительного просмотра кода, выберите Показывать подсказку предварительного просмотра. Свернутые области затенены иначе. Они развертываются, если дважды щелкнуть их.
Можно отключить миниатюрное представление кода в режиме карты. Для этого задайте для параметра Обзор исходного кода значение Выкл. Если установлен флажок Показывать подсказку предварительного просмотра, окно предварительного просмотра кода все так же будет отображаться в том расположении на полосе прокрутки, на которое вы наведите указатель. А если щелкнуть эту точку, курсор по-прежнему будет в нее перемещаться.
На следующем изображении показано, как выглядит пример поиска в режиме карты со средней шириной:
На следующем рисунке показано, как работает параметр Показывать подсказку предварительного просмотра:
Чтобы изменить цвета, отображаемые в режиме карты, последовательно выберите Сервис > Параметры > Среда > Шрифты и цвета. Затем в разделе Отображаемые элементы выберите любой из элементов, которому предшествует "Overview" (Обзор), измените цвета, а затем нажмите кнопку ОК.
Прокрутка необходима, если нужно поместить большой объем содержимого в ограниченную область. Для обеспечения прокрутки в WPF необходимо упаковать соответствующее содержимое в элемент ScrollViewer.
Объект ScrollViewer может содержать все, что угодно, но обычно это контейнер компоновки. Ниже представлен пример прокрутки:
Если в этом примере изменить размер окна, чтобы его размера хватило на все содержимое, полоса прокрутки станет неактивной, хотя и останется видимой. Этим поведением можно управлять с помощью свойства VerticalScrollBarVisibility, которое принимает одно из значений из перечисления ScrollBarVisibility. Стандартное значение Visible обеспечивает постоянное присутствие вертикальной полосы прокрутки. Значение Auto применяется, если нужно, чтобы полоса прокрутки появлялась, когда она нужна, и исчезала, когда не нужна. А значение Disabled позволяет полностью скрывает полосу прокрутки.
Есть еще значение Hidden, которое похоже на Disabled, но с небольшими отличиями. Во-первых, содержимое со скрытой полосой прокрутки все-таки можно прокручивать (например, с помощью клавиш со стрелками). Во-вторых, содержимое в ScrollViewer располагается по-другому. Используя Disabled, вы указываете, что содержимое в ScrollViewer может располагать только пространством самого элемента ScrollViewer. А использование Hidden указывает, что содержимое располагает неограниченным пространством. То есть оно может выходить за пределы прокручиваемой области.
Обычно значение Hidden используется, если предполагается выполнять прокрутку с помощью другого механизма (например, пользовательских кнопок прокрутки). А значение Disabled используется только если нужно временно запретить элементу ScrollViewer выполнять любые действия вообще.
Элемент ScrollViewer поддерживает и горизонтальную прокрутку. Однако по умолчанию свойство HorizontalScrollBarVisibility имеет значение Hidden. Для использования горизонтальной прокрутки необходимо изменить это значение на Visible или Auto.
Программная прокрутка
Для прокрутки окна, изображенного на рисунке, можно щелкнуть мышью на полосе прокрутки, можно поместить курсор над сеткой и использовать колесико мыши, можно перемещаться по элементам управления с помощью клавиши табуляции, либо можно щелкнуть где-то на пустом месте сетки и воспользоваться клавишами управления курсором. Если этого вам все еще мало, можно использовать методы класса ScrollViewer для программной прокрутки содержимого:
Наиболее понятны методы LineUp() и LineDown(), которые эквивалентны щелчкам на кнопках со стрелками на концах вертикальной полосы прокрутки для смещения вверх или вниз.
Можно также использовать методы PageUp() и PageDown(), которые прокручивают содержимое на один экран вверх или вниз и эквивалентны щелчкам на поверхности полосы прокрутки выше или ниже ползунка.
Существуют аналогичные методы для горизонтальной прокрутки: LineLeft(), LineRight(), PageLeft() и PageRight().
И, наконец, имеются методы ScrollToXxx() для перемещения в некоторые конкретные места. Для вертикальной прокрутки это методы ScrollToEnd() и ScrollToHome(), которые выполняют сдвиг в конец или начало прокручиваемого содержимого, и ScrollToVerticalOffset(), который выполняет сдвиг в конкретную позицию. Имеются и горизонтальные варианты этих методов: ScrollToLeftEnd(), ScrollToRightEnd() и ScrollToHorizontalOffset().
Специальные способы прокрутки
Встроенные в ScrollViewer способы прокрутки весьма полезны. Они позволяют выполнять плавную прокрутку любого содержимого — от сложных векторных изображений до сетки с элементами. Однако одной из наиболее интересных возможностей класса ScrollViewer является то, что он позволяет содержимому принимать участие в процессе прокрутки. Вот как это работает:
Помещаете прокручиваемый элемент внутри элемента ScrollViewer. Это может быть любой элемент, реализующий интерфейс IScrollInfo.
Указываете объекту ScrollViewer, что содержимое знает, как выполнять прокрутку, для этого нужно установить свойство ScrollViewer.CanContentScroll равным true.
При задействовании элемента ScrollViewer (с помощью полосы прокрутки, колесика мыши, методов прокрутки и т.д.) он вызывает соответствующие методы вложенного элемента с помощью интерфейса IScrollInfo. Затем этот элемент выполняет собственную специализированную прокрутку.
В интерфейсе IScrollInfo определен набор методов, которые реагируют на различные действия прокрутки. Например, он содержит многие методы прокрутки, имеющиеся в ScrollViewer, такие как LineUp(), LineDown(), PageUp() и PageDown(). Кроме того, в нем имеются методы реагирования на колесико мыши.
Интерфейс IScrollInfo реализован в очень немногих элементах. Одним из них является контейнер StackPanel. В его реализации IScrollInfo используется логическая прокрутка, т.е. прокрутка, которая выполняет перемещение от элемента к элементу, а не от строки к строке.
Если поместить элемент StackPanel на ScrollViewer без установки свойства CanContentScroll, то вы получите обычное поведение. Прокрутка вверх и вниз выполняет сдвиги по нескольку пикселей. Но если задать свойство CanContentScroll равным true, то при каждом щелчке вниз будет выполняться прокрутка до начала следующего элемента.
Система логической прокрутки StackPanel может вам нравиться или не нравиться. Но она абсолютно необходима для создания пользовательской панели с особым поведением прокрутки.
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Реализует базовую функциональность элемента управления "полоса прокрутки".
Примеры
В следующем примере создается и инициализируется VScrollBar и добавляется в объект Form.
Комментарии
Обычно не наследуется непосредственно от ScrollBar класса. Чтобы создать собственный класс полосы прокрутки VScrollBar , наследуйте от класса или HScrollBar класса.
Поле прокрутки иногда называется большим пальцем прокрутки.
Чтобы настроить диапазон значений элемента управления полосы прокрутки, задайте Minimum параметры и Maximum свойства. Чтобы настроить расстояние перемещения поля прокрутки, задайте SmallChange параметры и LargeChange свойства. Чтобы настроить начальную точку поля прокрутки, задайте Value свойство при первоначальном отображении элемента управления.
Рекомендации по пользовательскому интерфейсу показывают, что SmallChange свойства LargeChange задаются относительно размера представления, которое видит пользователь, а не общий размер, включая невидимую часть. Например, если у вас есть поле рисунка с полосами прокрутки с большим изображением, SmallChange свойства LargeChange должны быть заданы относительно размера поля рисунка, а не размера изображения.
Конструкторы
Инициализирует новый экземпляр класса ScrollBar.
Свойства
Получает объект AccessibleObject, назначенный элементу управления.
Возвращает или задает описание выполняемого по умолчанию действия элемента управления для использования клиентскими приложениями со специальными возможностями.
Возвращает или задает описание элемента управления, используемого клиентскими приложениями со специальными возможностями.
Возвращает или задает имя элемента управления, используемого клиентскими приложениями со специальными возможностями.
Возвращает или задает доступную роль элемента управления.
Возвращает или задает значение, указывающее, может ли элемент управления принимать данные, перетаскиваемые в него пользователем.
Возвращает или задает границы контейнера, с которым связан элемент управления, и определяет способ изменения размеров элемента управления при изменении размеров его родительского элемента.
Возвращает или задает местоположение, в котором выполняется прокрутка этого элемента управления в ScrollControlIntoView(Control).
Возвращает или задает значение, показывающее, изменяются ли автоматически размеры объекта ScrollBar, чтобы вместить его содержимое.
Данное свойство не применимо к этому классу.
Возвращает или задает цвет фона для элемента управления.
Возвращает или задает фоновое изображение, отображаемое на элементе управления.
Возвращает или задает макет фонового изображения в соответствии с перечислением ImageLayout.
Возвращает или задает макет фонового изображения в соответствии с перечислением ImageLayout.
Возвращает или задает значение BindingContext для элемента управления.
Возвращает расстояние в пикселях между нижней границей элемента управления и верхней границей клиентской области контейнера.
Возвращает или задает размер и местоположение (в пикселях) элемента управления, включая его неклиентские элементы, относительно его родительского элемента управления.
Получает значение, указывающее, можно ли для свойства ImeMode установить активное значение с целью включения поддержки IME.
Возвращает значение, указывающее, может ли элемент управления получать фокус.
Определяет, могут ли вызываться события в элементе управления.
Возвращает значение, указывающее, доступен ли элемент управления для выбора.
Возвращает или задает значение, указывающее, была ли мышь захвачена элементом управления.
Возвращает или задает значение, указывающее, вызывает ли элемент управления выполнение проверки для всех элементов управления, требующих проверки, при получении фокуса.
Возвращает прямоугольник, представляющий клиентскую область элемента управления.
Возвращает или задает высоту и ширину клиентской области элемента управления.
Возвращает название организации или имя создателя приложения, содержащего элемент управления.
Возвращает объект IContainer, который содержит коллекцию Component.
Возвращает значение, указывающее, имеет ли элемент управления или один из его дочерних элементов фокус ввода в настоящий момент.
Возвращает или задает контекстное меню, связанное с элементом управления.
Возвращает или задает объект ContextMenuStrip, сопоставленный с этим элементом управления.
Возвращает коллекцию элементов управления, содержащихся в элементе управления.
Возвращает значение, указывающее, был ли создан элемент управления.
Возвращает параметры, необходимые для создания дескриптора элемента управления.
Возвращает или задает курсор, отображаемый, когда указатель мыши находится на элементе управления.
Возвращает привязки данных для элемента управления.
Возвращает или задает курсор по умолчанию для элемента управления.
Возвращает стандартный режим редактора методов ввода, поддерживаемый данным элементом управления.
Получает расстояние по умолчанию между краями элемента управления ScrollBar и его содержимым.
Возвращает размер пустого пространства в пикселях между элементами управления, которое определено по умолчанию.
Возвращает длину и высоту в пикселях, которые были указаны в качестве максимального размера элемента управления.
Возвращает длину и высоту в пикселях, которые были указаны в качестве минимального размера элемента управления.
Возвращает внутренние промежутки в содержимом элемента управления в пикселях.
Получает размер элемента управления по умолчанию.
Возвращает значение, указывающее, находится ли данный компонент Component в режиме конструктора в настоящее время.
Получает значение DPI для устройства, на котором сейчас отображается элемент управления.
Возвращает прямоугольник, представляющий отображаемую область элемента управления.
Получает значение, указывающее, находится ли базовый класс Control в процессе удаления.
Возвращает или задает границы элемента управления, прикрепленные к его родительскому элементу управления, и определяет способ изменения размеров элемента управления с его родительским элементом управления.
Возвращает или задает значение, указывающее, должна ли поверхность этого элемента управления перерисовываться с помощью дополнительного буфера, чтобы уменьшить или предотвратить мерцание.
Возвращает или задает значение, указывающее, может ли элемент управления отвечать на действия пользователя.
Возвращает список обработчиков событий, которые прикреплены к этому объекту Component.
Возвращает значение, указывающее, имеется ли на элементе управления фокус ввода.
Возвращает или задает шрифт текста, отображаемого элементом управления.
Возвращает или задает высоту шрифта элемента управления.
Возвращает или задает цвет переднего плана элемента управления "полоса прокрутки".
Возвращает дескриптор окна, с которым связан элемент управления.
Возвращает значение, указывающее, содержит ли элемент управления один или несколько дочерних элементов.
Возвращает или задает высоту элемента управления.
Возвращает или задает режим редактора метода ввода, поддерживаемый данным элементом управления.
Получает или задает режим IME элемента управления.
Возвращает значение, указывающее, следует ли вызывающему оператору обращаться к методу invoke во время вызовов метода из элемента управления, так как вызывающий оператор находится не в том потоке, в котором был создан элемент управления.
Возвращает или задает значение, указывающее, является ли элемент управления видимым для приложений со специальными возможностями.
Указывает, является ли один из предков этого элемента управления сайтом и сайтом в DesignMode. Это свойство доступно только для чтения.
Возвращает значение, указывающее, был ли удален элемент управления.
Возвращает значение, указывающее, имеется ли у элемента управления связанный с ним дескриптор.
Возвращает значение, указывающее, отображается ли зеркально элемент управления.
Возвращает или устанавливает значение, добавляемое или вычитаемое из свойства Value при перемещении указателя полосы прокрутки на большое расстояние.
Получает кэшированный экземпляр механизма размещения элемента управления.
Возвращает или задает расстояние в пикселях между левой границей элемента управления и левой границей клиентской области его контейнера.
Возвращает или задает координаты левого верхнего угла элемента управления относительно левого верхнего угла его контейнера.
Возвращает или задает расстояние между элементами управления.
Возвращает или задает верхнюю границу значений диапазона прокрутки.
Возвращает или задает размер, являющийся верхней границей, которую может указать метод GetPreferredSize(Size).
Возвращает или задает нижнюю границу значений диапазона прокрутки.
Возвращает или задает размер, являющийся нижней границей, которую может указать метод GetPreferredSize(Size).
Возвращает или задает имя элемента управления.
Возвращает или задает заполнение в элементе управления.
Возвращает или задает родительский контейнер элемента управления.
Возвращает размер прямоугольной области, в которую может поместиться элемент управления.
Возвращает имя продукта сборки, содержащей элемент управления.
Возвращает версию сборки, содержащую элемент управления.
Возвращает значение, указывающее, осуществляет ли в настоящий момент элемент управления повторное создание дескриптора.
Возвращает или задает область окна, связанную с элементом управления.
Это свойство устарело.
Возвращает или задает значение, указывающее, перерисовывается ли элемент управления при изменении размеров.
Возвращает расстояние в пикселях между правой границей элемента управления и левой границей клиентской области его контейнера.
Возвращает или задает значение, указывающее, выровнены ли компоненты элемента управления для поддержки языков, использующих шрифты с написанием справа налево.
Получает значение, определяющее масштабирование дочерних элементов управления.
Получает или задает флаг для масштабирования полосы прокрутки в соответствии с разрешением (DPI) окна.
Возвращает значение, указывающее, должен ли элемент управления отображать прямоугольники фокуса.
Возвращает значение, указывающее, имеет ли пользовательский интерфейс соответствующее состояние, при котором отображаются или скрываются сочетания клавиш.
Возвращает или задает местонахождение элемента управления.
Возвращает или задает высоту и ширину элемента управления.
Возвращает или задает значение, добавляемое или вычитаемое из свойства Value при перемещении указателя полосы прокрутки на малое расстояние.
Возвращает или задает последовательность перехода по клавише TAB между элементами управления внутри контейнера.
Возвращает или задает значение, показывающее, может ли пользователь передать фокус в элемент управления ScrollBar при помощи клавиши TAB.
Возвращает или задает объект, содержащий данные об элементе управления.
Возвращает или задает текст, связанный с этим элементом управления.
Возвращает или задает расстояние в пикселях между верхней границей элемента управления и верхней границей клиентской области его контейнера.
Получает родительский элемент управления, не имеющий другого родительского элемента управления Windows Forms. Как правило, им является внешний объект Form, в котором содержится элемент управления.
Возвращает или задает значение, указывающее, следует ли использовать курсор ожидания для текущего элемента управления и всех дочерних элементов управления.
Возвращает или задает численное значение, представляющее текущее положение ползунка на полосе прокрутки.
Возвращает или задает значение, указывающее, отображаются ли элемент управления и все его дочерние элементы управления.
Возвращает или задает ширину элемента управления.
Данное свойство не применимо к этому классу.
Методы
Уведомляет клиентские приложения со специальными возможностями об указанном перечислении AccessibleEvents для указанного дочернего элемента управления.
Уведомляет клиентские приложения со специальными возможностями об указанном перечислении AccessibleEvents для указанного дочернего элемента управления.
Выполняет указанный делегат асинхронно в потоке, в котором был создан базовый дескриптор элемента управления.
Выполняет указанный делегат асинхронно в потоке, в котором был создан базовый дескриптор элемента управления.
Выполняет указанный делегат асинхронно с указанными аргументами в потоке, в котором был создан базовый дескриптор элемента управления.
Помещает элемент управления в начало z-порядка.
Возвращает значение, указывающее, является ли указанный элемент управления дочерним элементом.
Этот метод отвечает за создание AccessibleObject для этого экземпляра ScrollBar. Экземпляр AccessibleObject, возвращаемый этим методом, поддерживает свойство ControlType модели автоматизации пользовательского интерфейса Microsoft Windows.
Создает для элемента управления новый объект с поддержкой специальных возможностей.
Вызывает принудительное создание видимого элемента управления, включая создание дескриптора и всех видимых дочерних элементов.
Создает новый экземпляр коллекции элементов управления для данного элемента управления.
Создает объект Graphics для элемента управления.
Создает дескриптор для элемента управления.
Создает объект, который содержит всю необходимую информацию для создания прокси-сервера, используемого для взаимодействия с удаленным объектом.
Удаляет дескриптор, связанный с элементом управления.
Освобождает все ресурсы, занятые модулем Component.
Освобождает неуправляемые ресурсы, используемые объектом Control и его дочерними элементами управления (при необходимости освобождает и управляемые ресурсы).
Начинает операцию перетаскивания.
Поддерживает отрисовку в указанном точечном рисунке.
Получает возвращаемое значение асинхронной операции, представленное переданным объектом IAsyncResult.
Определяет, равен ли указанный объект текущему объекту.
Возвращает форму, в которой находится элемент управления.
Устанавливает фокус ввода на элемент управления.
Получает указанный объект AccessibleObject.
Получает значение, указывающее, как будет вести себя элемент управления, когда его свойство AutoSize включено.
Возвращает дочерний элемент управления, имеющий указанные координаты.
Возвращает дочерний элемент управления, расположенный по указанным координатам, определяя, следует ли игнорировать дочерние элементы управления конкретного типа.
Возвращает следующий объект ContainerControl в цепочке родительских элементов управления данного элемента.
Служит хэш-функцией по умолчанию.
Извлекает объект обслуживания во время существования, который управляет политикой времени существования данного экземпляра.
Возвращает следующий или предыдущий элемент среди дочерних элементов управления в последовательности клавиши TAB.
Вычисляет размер прямоугольной области, в которую помещается элемент управления.
Возвращает границы, которые должны использоваться, когда ScrollBar масштабируется на заданную величину.
Возвращает границы, внутри которых масштабируется элемент управления.
Возвращает объект, представляющий службу, предоставляемую классом Component или классом Container.
Возвращает значение указанного бита стиля элемента управления для данного элемента управления.
Определяет, находится ли элемент управления на верхнем уровне.
Возвращает объект Type для текущего экземпляра.
Скрывает элемент управления от пользователя.
Получает объект службы времени существования для управления политикой времени существования для этого экземпляра.
Вызывается после добавления элемента управления в другой контейнер.
Делает недействительной всю поверхность элемента управления и вызывает его перерисовку.
Выполняет указанный делегат в том потоке, которому принадлежит базовый дескриптор окна элемента управления.
Выполняет указанный делегат в том потоке, которому принадлежит базовый дескриптор окна элемента управления.
Выполняет указанный делегат в том потоке, которому принадлежит основной дескриптор окна элемента управления, с указанным списком аргументов.
Выполняет указанный делегат в том потоке, которому принадлежит базовый дескриптор окна элемента управления.
Вызывает событие GotFocus для указанного элемента управления.
Вызывает событие LostFocus для указанного элемента управления.
Вызывает событие Click для указанного элемента управления.
Вызывает событие Paint для указанного элемента управления.
Вызывает событие PaintBackground для указанного элемента управления.
Определяет, является ли символ входным символом, который распознается элементом управления.
Определяет, является ли заданная клавиша обычной клавишей ввода или специальной клавишей, нуждающейся в предварительной обработке.
Преобразует логическое значение DPI в эквивалентное значение DPI DeviceUnit.
Преобразует размер из логических единиц в единицы устройства путем его масштабирования к текущему DPI и округлением вниз до ближайшего целого значения ширины и высоты.
Создает неполную копию текущего объекта Object.
Создает неполную копию текущего объекта MarshalByRefObject.
Вызывает событие Invalidated, чтобы сделать недействительной указанную область элемента управления.
Читайте также: