Элементы управления
Элемент управления — это объект, имеющий свои свойства, методы, события.
- Надпись Label — служит для добавления текста на форму. Этот текст не может быть изменен пользователем, но может быть изменен программой.
Свойства: - Caption — текст надписи.
- Font — шрифт, его размер, начертание.
- Alignment — выравнивание текста: Left (влево), Right (вправо), Center (по центру).
- ToolTipText — подсказка, появляющаяся при наведении указателя мыши на элемент управления.
- Свойства размещения и размера элемента:
Текстовое поле — TextBox
Служит для того, чтобы пользователь мог ввести текст во время работы программы.
Свойства:
Text — содержит символы, которые ввел пользователь. Другие свойства аналогичны элементу «Надпись».
Рамка — Frame — используется для оформления, а также для группировки переключателей. Сверху на рамке можно сделать надпись с помощью свойства Caption. Если нужно создать элемент внутри рамки, то перед их рисованием рамку выделяют, тогда рамка может служить контейнером для группы переключателей.
Свойства:
- Caption — надпись на кнопке.
- Enabled — доступность элемента. С помощью этого свойства блокируются элементы, которые пользователю нельзя использовать в данный момент. Заблокированные элементы отображаются серым цветом. В заблокированное текстовое поле не получится ввести текст, а заблокированную кнопку нельзя нажать.
Выбирают из двух значений:- True (Да) — элемент управления доступен пользователю.
- False (Нет) — элемент управления не доступен.
- Visible — видимость элемента управления:
- True (Да) — виден.
- False (Нет) — не виден.
Используется, когда пользователь должен ввести Да (флажок установлен ) или Нет (флажок снят )
Свойства:
Value — содержит значение элемента управления. Имеются следующие значения:
- — нет, флажок снят;
- — есть, флажок установлен;
- — флажок недоступен.
Позволяет пользователю выбрать один вариант из нескольких.
Свойства:
Value — показывает выбрана опция (1) или нет (0).
В это поле пользователь может вводить текст так же, как и в TextBox, а кроме этого, если нажать , то откроется список, из которого можно выбрать нужную строку.
Свойства:
- Text — содержимое строки, введенное пользователем или выбранное из списка.
- List — строки списка (многострочное свойство).
- ListIndex — номер выбранной пользователем строки (нумерация начинается с нуля, если никакая строка не была выбрана, то свойство равно -1).
Cодержит список строк, в котором пользователь может выбрать одну или несколько строк.
Свойства элемента аналогичны элементу ComboBox, за исключением свойства Text, которое здесь отсутствует.

Содержит рисунок. Рисунок выбирается с помощью свойства Picture, в которое вводится имя файла или выбирается с помощью кнопки .
Процедуры-обработчики событий
Особенностью обработки событий среде 1С:Предприятия 8 является то, что имя процедуры-обработчика в одних случаях должно совпадать с именем события, а в других случаях может от него отличаться. Данная статья написана, чтобы внести ясность в этом вопросе.
Обратите внимание, что термин «Предопределенная процедура», который использовался в версии 7.х, теперь заменен на «процедура-обработчик события» или просто «обработчик события».
| ПРАВИЛО №1. Если процедура-обработчик события относится к форме или элементу управления, то ее обязательно нужно указывать в палитре свойств для формы или элемента управления. |
Ниже показана палитра свойств для формы элемента справочника «Номенклатура» с несколькими назначенными обработчиками событий:

За информацией о приемах работы с этой частью палитры свойств обращайтесь к документации: книга «Конфигурирование и администрирование», «Глава 3. Объекты конфигурации => Свойства элементов управления => Категория свойств События» (стр. 1 — 204)
Обратите внимание на важный момент, имя процедуры-обработчика событий может не совпадать с именем события . Для элементов управления чаще всего так и бывает, например, процедура «ТипЦенПриИзменении» обрабатывает событие «ПриИзменении» поля ввода для реквизита «ТипЦен», как показано на следующем рисунке:

Как правило, процедура-обработчик имеет тот же набор параметров, что и событие. Если у нее нет соответствующих параметров, то обработка события может получиться неполной. Поэтому рекомендуется создавать процедуры-обработчики конструктором через палитру свойств, нажимая кнопку с лупой или выбирая процедуру из выпадающего списка.
Есть еще одна интересная возможность: одна и та же процедура может «обслуживать» несколько событий формы или элементов управления, в том числе от разных источников. Элемент управления, который инициировал событие, передается в качестве первого параметра в эту процедуру-обработчик (параметр «Элемент»), и при необходимости алгоритм может проанализировать, откуда пришло событие, и выполнить соответствующие действия.
| ПРАВИЛО №2. Процедуры-обработчики событий, расположенные в модуле приложения, модуле внешнего соединения, модуле прикладного объекта должны называться точно так, как называются соответствующие события. |
Поясним это правило на конкретных примерах:
1. Процедуры-обработчики событий, расположенные в модуле приложения или модуле внешнего соединения, совпадают с именами событий:
- ПередНачаломРаботыСистемы
- ПриНачалеРаботыСистемы
- ПриЗавершенииРаботыСистемы
- ПередЗавершениемРаботыСистемы
- ОбработкаВнешнегоСобытия
2. Имена процедур-обработчиков событий, расположенных в модуле объекта, тоже строго соответствуют именам событий:
для модуля документа (события объекта типа «ДокументОбъект»)
- ПередЗаписью
- ПриЗаписи
- ПриУдалении
- ПриКопировании
- ОбработкаЗаполнения (для обработки «ввода на основании»)
- ОбработкаПроведения
- ОбработкаУдаленияПроведения
- ПриУстановкеНовогоНомера
Аналогичные обработчики событий могут располагаться в модуле справочника и модулях других прикладных объектов.
3. Есть также модуль набора записей для всех видов регистров, который подобен модулям прикладных объектов. Модуль набора записей может содержать следующие процедуры-обработчики событий (имена процедур должны совпадать с именами событий):
- ПередЗаписью
- ПриЗаписи
Ниже приведены несколько важных моментов, которые полезно помнить при работе с событиями:
Примечание 1. Событие ПередЗаписью прикладного объекта отличается от события ПередЗаписью формы, связанной с этим прикладным объектом. Обработчик события в модуле формы вызывается при интерактивной записи, а обработчик в модуле объекта при любом способе записи элемента в базу данных.
Примечание 2. Если в процедурах-обработчиках модуля объекта нужно обратиться к самому объекту (текущий элемент справочника, текущий документ и т.д.), то для этого можно использовать свойство ЭтотОбъект. Оно содержит объект типа «СправочникОбъект», «ДокументОбъект» и т.д.
Примечание 3. Считается грубой ошибкой в процедурах-обработчиках событий объектов вызывать такие интерактивные команды, как Вопрос и Предупреждение. Эти команды показывают на экране диалоговое окно и ждут реакции пользователя. Так как событие обрабатывается в рамках транзакции, то это вызовет значительную задержку в обработке события и часть данных (или вся таблица) будет заблокирована на время ожидания.
События управления (Windows Forms .NET)
Элементы управления предоставляют события, возникающие при взаимодействии пользователя с элементом управления или при изменении состояния элемента управления. В этой статье описываются распространенные события, используемые большинством элементов управления, события, создаваемые взаимодействием с пользователем, и события, уникальные для определенных элементов управления. Дополнительные сведения о событиях в Windows Forms см. в разделе Общие сведения о событиях и Обработка и вызов событий.
Документация по рабочему столу для .NET 7 и .NET 6 находится в стадии разработки.
Дополнительные сведения о добавлении или удалении обработчика событий элемента управления см. в разделе Обработка события.
Наиболее распространенные события
Элементы управления предоставляют более 60 событий через базовый класс Control. К ним относятся событие Paint, вызывающее отрисовку элемента управления, связанные с отображением окна события, такие как Resize и Layout, а также низкоуровневые события мыши и клавиатуры. Некоторые низкоуровневые события с помощью Control синтезируются в семантические события, такие как Click и DoubleClick. Большинство общих событий относятся к следующим категориям:
- События мыши
- События клавиатуры
- События изменения свойств
- Другие события
События мыши
Учитывая, что Windows Forms является технологией пользовательского интерфейса, действия мыши являются основным способом взаимодействия пользователей с приложением Windows Forms. Все элементы управления предоставляют основные события, связанные с мышью:
Дополнительные сведения см. в статье Использование событий мыши.
События клавиатуры
Если элемент управления реагирует на данные, введенные пользователем, например, элемент управления TextBox или Button, для элемента управления возникает соответствующее событие ввода. Элемент управления должен быть настроен для получения событий клавиатуры. Некоторые элементы управления, такие как элемент управления Label, не могут быть настроены и не могут получать события клавиатуры. Ниже приведен список событий клавиатуры:
Дополнительные сведения см. в разделе об использовании событий клавиатуры.
События изменения свойств
Windows Forms использует шаблон PropertyNameChanged для свойств, имеющих события изменения. Обработчик привязки данных, предоставляемый Windows Forms, распознает этот шаблон и эффективно интегрируется с ним. При создании собственных элементов управления реализуйте этот шаблон.
Этот шаблон реализует следующие правила, используя свойство FirstName в качестве примера:
- Присвойте свойству имя: FirstName .
- Создайте событие для свойства с помощью шаблона PropertyNameChanged : FirstNameChanged .
- Создайте частный или защищенный метод с помощью шаблона OnPropertyNameChanged : OnFirstNameChanged .
Если набор свойств FirstName изменяет базовое значение, вызывается метод OnFirstNameChanged . Метод OnFirstNameChanged вызывает событие FirstNameChanged .
Ниже приведены некоторые распространенные события изменения свойств для элемента управления:
| Мероприятие | Description |
|---|---|
| BackColorChanged | Происходит при изменении значения свойства BackColor. |
| BackgroundImageChanged | Происходит при изменении значения свойства BackgroundImage. |
| BindingContextChanged | Происходит при изменении значения свойства BindingContext. |
| DockChanged | Происходит при изменении значения свойства Dock. |
| EnabledChanged | Происходит, если значение свойства Enabled было изменено. |
| FontChanged | Происходит при изменении значения свойства Font. |
| ForeColorChanged | Происходит при изменении значения свойства ForeColor. |
| LocationChanged | Происходит, если значение свойства Location было изменено. |
| SizeChanged | Происходит при изменении значения свойства Size. |
| VisibleChanged | Происходит при изменении значения свойства Visible. |
Полный список событий см. в разделе СобытияКласса элементов управления.
Другие события
Элементы управления также вызывают события на основе состояния элемента управления или других взаимодействий с элементом управления. Например, событие HelpRequested вызывается, если элемент управления сфокусирован, и пользователь нажимает клавишу F1 . Это событие также вызывается, если пользователь нажимает контекстную кнопку Справка в форме, а затем нажимает курсор справки в элементе управления.
Другой пример, когда при изменении, перемещении или изменении размера элемента управления Paint вызывается событие. Это событие предоставляет разработчику возможность рисовать на элементе управления и менять его внешний вид.
Полный список событий см. в разделе СобытияКласса элементов управления.
См. также
- Обработка события
- Общие сведения о событиях
- Использование событий мыши
- Использование событий клавиатуры
- System.Windows.Forms.Control
- System.Windows.Forms.Control.Click
- System.Windows.Forms.Button
Совместная работа с нами на GitHub
Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.
События: change, input, cut, copy, paste
Давайте рассмотрим различные события, сопутствующие обновлению данных.
Событие: change
Событие change срабатывает по окончании изменения элемента.
Для текстовых это означает, что событие происходит при потере фокуса.
Пока мы печатаем в текстовом поле в примере ниже, событие не происходит. Но когда мы перемещаем фокус в другое место, например, нажимая на кнопку, то произойдёт событие change :
Для других элементов: select , input type=checkbox/radio событие запускается сразу после изменения значения:
Событие: input
Событие input срабатывает каждый раз при изменении значения.
В отличие от событий клавиатуры, оно работает при любых изменениях значений, даже если они не связаны с клавиатурными действиями: вставка с помощью мыши или распознавание речи при диктовке текста.
Если мы хотим обрабатывать каждое изменение в , то это событие является лучшим выбором.
С другой стороны, событие input не происходит при вводе с клавиатуры или иных действиях, если при этом не меняется значение в текстовом поле, т.е. нажатия клавиш ⇦ , ⇨ и подобных при фокусе на текстовом поле не вызовут это событие.
Нельзя ничего предотвратить в oninput
Событие input происходит после изменения значения.
Поэтому мы не можем использовать event.preventDefault() там – будет уже слишком поздно, никакого эффекта не будет.
События: cut, copy, paste
Эти события происходят при вырезании/копировании/вставке данных.
Они относятся к классу ClipboardEvent и обеспечивают доступ к копируемым/вставляемым данным.
Мы также можем использовать event.preventDefault() для предотвращения действия по умолчанию, и в итоге ничего не скопируется/не вставится.
Например, код, приведённый ниже, предотвращает все подобные события и показывает, что мы пытаемся вырезать/копировать/вставить:
Технически, мы можем скопировать/вставить всё. Например, мы можем скопировать файл из файловой системы и вставить его.
Существует список методов в спецификации для работы с различными типами данных, чтения/записи в буфер обмена.
Но обратите внимание, что буфер обмена работает глобально, на уровне ОС. Большинство браузеров в целях безопасности разрешают доступ на чтение/запись в буфер обмена только в рамках определённых действий пользователя, к примеру, в обработчиках событий onclick .
Также запрещается генерировать «пользовательские» события буфера обмена при помощи dispatchEvent во всех браузерах, кроме Firefox.
Итого
События изменения данных:
| Событие | Описание | Особенности |
|---|---|---|
| change | Значение было изменено. | Для текстовых полей срабатывает при потере фокуса. |
| input | Срабатывает при каждом изменении значения. | Запускается немедленно, в отличие от change . |
| cut/copy/paste | Действия по вырезанию/копированию/вставке. | Действие можно предотвратить. Свойство event.clipboardData предоставляет доступ на чтение/запись в буфер обмена… |
Задачи
Депозитный калькулятор
Создайте интерфейс, позволяющий ввести сумму банковского вклада и процент, а затем рассчитать, какая это будет сумма через заданный промежуток времени.
Любое изменение введённых данных должно быть обработано немедленно.
// initial: начальная сумма денег // interest: проценты, например, 0.05 означает 5% в год // years: сколько лет ждать let result = Math.round(initial * (1 + interest) ** years);