Методы и события форм


Содержание

Объекты, свойства, методы и события MS Visual Basic

Объекты (экземпляры класса) представляют собой сущности, которые могут содержать данные и код. Объекты предоставляют программисту все основные возможности объектно-ориентированного программирования, такие как наследование, инкапсуляция и полиморфизм.

Visual Basic содержит объекты (простые, элементы управления, коллекции и др.), основными из которых являются следующие.

  • • ClipBoard — предоставляет доступ к буферу обмена Windows;
  • • Font — содержит информацию, необходимую для определения внешнего вида текста;
  • • Form — окно, содержащее рабочую поверхность проекта;
  • • MDlForm — материнская MDI-форма, которая может содержать в себе дочерние формы (документы);
  • • Picture — позволяет манипулировать графикой в различных форматах;
  • • Screen — позволяет манипулировать положением формы на экране, шрифтами, а также указателем мыши за пределами формы.
  • • Checkbox — поле флажка, позволяющее задавать и отображать логическое значение;
  • • ComboBox — комбинированное поле, объединяющее текстовое поле и связанное с ним поле списка;
  • • Data — предоставляет доступ к базе данных посредством объекта Recordset одного из трех типов;
  • • FileListBox — отображает список файлов текущего каталога и позволяет выбрать один или несколько файлов;
  • • Frame — рамка является контейнером, в который можно поместить другие управляющие элементы;
  • • HScrollBar, VScrollBar — полосы прокрутки, позволяющие отображать и вводить числовые значения из заданного диапазона с помощью указателя мыши;
  • • Image — графический образ, предназначенный для отображения на экране точечного рисунка или значка;
  • • Label — поле для отображения текстовой надписи;
  • • Line — отображает линию;
  • • ListBox — поле списка, где можно отображать элементы списка и выбирать их;
  • • Menu — элемент меню;
  • OLE — OLE-контейнер, способный заключать в себе связываемые и внедряемые объекты;
  • • OptionButten — позиция переключателя. Два и более элементов этого вида, помещенные в один контейнер, составляют переключатель на соответствующее число позиций;
  • • Picture Box — отображает на экране загруженные точечные рисунки и позволяет рисовать на своей поверхности с помощью графических методов;
  • • Shape — фигура, служит для представления на рабочей поверхности объекта геометрических фигур;
  • • TextBox — отображает и позволяет изменять текст;
  • • Timer — генерирует события Timer через заданные промежутки времени.
  • • DataObjectFiles — коллекция строк с именами файлов, используемых объектом DataQbject;
  • • Forms — окна форм, включают все загруженные формы приложения.

Свойство — это управляющая структура, с помощью которой происходит доступ к полям объекта. Поле — это переменная класса, изменять значение которой можно с помощью свойств. Свойства определяют внешний вид и поведение объектов. Однотипные объекты могут иметь по ряду свойств одни и те же установки. Такие свойства называются групповыми и устанавливаются одновременно для выделенных объектов. Многие свойства являются общими (не путать с групповыми) для объектов. Например, свойства Name (Имя), Caption (Надпись), размеры и положение, шрифты, цвет, фокус (активизация) объектов, возможность видимости и т. д. Visual Basic содержит свойства объектов, основными из которых являются следующие:

  • • AutoRedraw — разрешает или запрещает автоматическое перерисовывание результатов работы графических методов на поверхности формы или элемента PictureBox;
  • • Autosize — разрешает или запрещает автоматическое изменение размеров элемента в соответствии с размерами его содержимого;
  • • Backcolor, Forecolor — задают цвета соответственно фона и переднего плана объекта;
  • • Backstyle — определяет стиль фона объекта
  • • BOF Action, EOF Action — содержит и позволяет задать значение вида автоматического действия, которое будет предпринято при получении свойством BOF или EOF значения True (т. е. при попытке перейти на позицию до начала или после конца файла);
  • • Bold — определяет наличие признака начертания «полужирный» для объекта Font;
  • • BorderColor — задает цвет обрамления;
  • • BorderStyle — задает стиль обрамления;
  • • Borderwidth — возвращает и позволяет задать значение, определяет толщину линий обрамления;
  • • Cancel — содержит и позволяет задать значение, определяющее срабатывание командной кнопки (обычно это кнопка Отмена) при нажатии клавиши Esc;
  • • Caption — содержит строковое значение, определяющее надпись на управляющем элементе или объекте;
  • • Changed — сигнализирует об изменении значения свойства на странице свойств;
  • • Class — возвращает имя класса, к которому относится внедренный объект;
  • • Clipboard — позволяет получить доступ к буферу обмена Windows;
  • • Col, Row — определяют текущую клетку в сетке или таблице данных;
  • • Cols, Rows — определяют общее количество столбцов и строк в сетке;
  • • Columns — определяет количество столбцов в списке;
  • • Currentx, CurrentY — содержат пару координат, на которых завершилась работа графического метода или последнего метода, выводящего символы;
  • • Database — содержит ссылку на объект типа Database, связанный с элементом типа Data;
  • • DatabaseName — возвращает и позволяет задать полное имя файла или каталога, содержащего базу данных, с которой связан или должен быть связан элемент типа Data;
  • • DataField — определяет поле в наборе записей, которое должен отображать данный элемент;
  • • DataSource — определяет имя элемента типа Data, через который данный управляющий элемент связан с базой данных;
  • • Default — разрешает или запрещает срабатывание командной кнопки (обычно ОК) при нажатии на клавишу Enter;
  • • DefaultType (элемент Data) — возвращает и позволяет задать тип источника данных для элемента типа Data;
  • • DragMode — возвращает и позволяет задать значение, определяющее режим выполнения операций Drag&Drop (автоматический или ручной);
  • • DrawMode — возвращает и позволяет задать вид линий для графических элементов и методов;
  • • DrawStyle — возвращает и позволяет задать стиль линий для графических методов;
  • • DrawWidth — определяет толщину линий для графических методов объектов;
  • • Enabled — возвращает и позволяет задать значение, разрешающее или запрещающее объекту реагировать на события, вызванные действиями пользователя;
  • • FileName — возвращает и позволяет задать полное имя файла;
  • • FileNumber — номер файла, присвоенный ему при открытии;
  • • Files — возвращает коллекцию DataObject Files, т. е. список имен файлов, которые используются объектом
  • • FontBold, Fontitalie, FontStrikeThru, FontUnderline — определяют атрибуты и признаки начертания шрифта;
  • • FontSize — определяет размер выбранного шрифта;
  • • Height, width — определят размеры объекта или столбцов сетки;
  • • icon — возвращает значок, появляющийся вместо формы при ее минимизации;
  • • image — возвращает код доступа к результатам работы графических методов, сохранившимся в памяти;
  • • interval — определяет интервал времени (в миллисекундах) между событиями таймера;
  • • KeyPreview — разрешает или запрещает форме перехватывать и предварительно просматривать нажатия клавиш, прежде чем передать их управляющему элементу;
  • • Left, Тор — определяют расстояния между левой и верхней границами объекта и соответствующими границами контейнера;
  • • List — возвращает и позволяет задать содержимое списка, принадлежащего данному управляющему элементу;
  • • Max, Min — определяют соответственно максимальное и минимальное значения свойства Value для полос прокрутки;
  • • MinButton — возвращает и позволяет задать значение, определяющее наличие кнопки минимизации окна в строке заголовка окна формы;
  • • Name — определяет имя объекта;
  • • Path — возвращает полное имя текущего каталога;
  • • Picture — возвращает и позволяет задать значок или точечный рисунок;
  • • Public — определяет, может ли данный управляющий элемент использоваться одновременно несколькими приложениями;
  • • Readonly — разрешает или запрещает модификацию базы данных;
  • • RecordSource — определяет имя физической таблицы либо SQL-выражение или объект QueryDef, который должен служить источником записей для управляющих элементов, связанных с данным элементом Data;
  • • ScaleLeft, ScaleTop — возвращают и позволяют задать координаты левого верхнего угла объекта;
  • • Screen — позволяет управлять положением формы на экране и указателем мыши за пределами формы;
  • • Shape — возвращает и позволяет задать значение, определяющее вид геометрической фигуры;
  • • Size (Font) — возвращает и позволяет задать значение, определяющее размер шрифта;
  • • Style — определяет стиль изображения объекта на экране и особенности его поведения;
  • • Text — возвращает и позволяет задать текст, содержащийся в текстовом или комбинированном поле;
  • • Value — возвращает и позволяет задать значение, соответствующее состоянию поля флажка или позиции переключателя, положению ползунка на полосе прокрутки, содержимому поля в текущей записи или состоянию командной кнопки;
  • • visible — разрешает или запрещает отображение объекта на экране;
  • • XI, yi, Х2, У2 — задают координаты начала и конца линии для управляющего элемента типа Line.

События — сообщения специального вида, создаваемые средой Windows. Отправителем сообщения может быть клавиатура, мышь и др., получателем — окно приложения и управляющий элемент в этом окне, который обладает фокусом. Для того чтобы событие происходило, в коде программы должны быть процедуры его обработки, т. е. обработчики событий.

Основными событиями являются следующие:

  • • Activate — происходит, когда объект становится текущим окном;
  • • Deactivate — происходит, когда объект перестает быть текущим окном;
  • • Change — сигнализирует об изменении содержимого управляющего элемента;
  • • Click — происходит по щелчку мыши, когда указатель мыши находится на управляющем элементе;
  • • DblClick — происходит по двойному щелчку мыши;
  • • DragDrop — происходит при завершении операции перетаскивания;
  • • DragOver — генерируется в процессе операции перетаскивания;
  • • DropDown — происходит перед развертыванием списка в комбинированном поле;
  • • Enter Focus — происходит, когда объект получает фокус клавиатуры;
  • • Error — происходит при возникновении ошибки доступа к данным, для которой не предусмотрена процедура обработки;
  • • ExitFocus — происходит, когда объект теряет фокус клавиатуры;
  • • Got Focus — происходит, когда объект получает фокус клавиатуры вследствие действий пользователя или благодаря вызову метода Set Focus;
  • • initialize — происходит при создании экземпляра формы, MDI-формы, страницы свойств, определяемого пользователем управляющего элемента или класса;
  • • KeyDown — происходит при нажатии клавиши, если объект обладает фокусом клавиатуры;
  • • KeyPress — происходит при нажатии и последующем отпускании клавиши, соответствующей одному из ASCII-сим- волов, если объект обладает фокусом клавиатуры;
  • • KeyUp — происходит при отпускании клавиши, если объект обладает фокусом клавиатуры;
  • • Load — происходит при загрузке формы;
  • • LostFocus — происходит, когда объект теряет фокус клавиатуры из-за действий пользователя или благодаря вызову метода SetFocus другого элемента;
  • • Mouse Down — происходит при нажатии кнопки мыши;
  • • MouseMove — происходит при перемещении мыши;
  • • MousUp — происходит при отпускании кнопки мыши;
  • • Scroll — происходит при перемещении ползунка на полосе прокрутки или элементе, содержащем полосу прокрутки;
  • • Show — происходит при изменении значения свойства visible пользовательского управляющего элемента или документа на True;
  • • Terminate — последнее событие жизненного цикла формы, страницы свойств, MDI-формы, пользовательского управляющего элемента или класса;
  • • Timer — происходит через интервал времени, заданный значением свойства interval управляющего элемента Timer;
  • • Unload — происходит при выгрузке формы и удалении ее с экрана;
  • • Updated — происходит после изменения данных, содержащихся в объекте.

Метод — это процедура или функция класса. Основными являются следующие методы:

  • • Arrange — упорядочивает дочерние окна или их значки в окне материнской MDI-формы;
  • • Circle — предназначен для рисования окружностей, эллипсов, дуг и секторов на рабочей поверхности объекта;
  • • Clear (clipboard, Combobox, ListBox) — удаляет (очищает) содержимое буфера обмена, комбинированного поля или поля списка;
  • • Close (OLE-контейнер) — закрывает объект, содержащийся в OLE-контейнере, и прекращает связь с создавшим его приложением;
  • • Cls — удаляет следы текстового и графического вывода с рабочей поверхности формы или управляющего элемента
  • • Сору — копирует объекты из OLE-контейнера в буфер обмена Windows;
  • • Drag — инициирует, завершает или прерывает операцию перетаскивания объектов;
  • • Files — возвращает список имен файлов, используя при этом формат vbCFiles;
  • • Get Data — получает графические данные из буфера обмена Windows или получает данные типа Variant из объекта типа DataObject;
  • • Get Text — получает текстовые данные из буфера обмена Windows;
  • • Line — рисует линии и прямоугольники на рабочей поверхности формы или управляющего элемента типа
  • • Move — перемещает формы, MDI-формы и управляющие элементы;
  • • PaintPicture — загружает точечный рисунок из файла и выводит его на рабочую поверхность формы, картинки или объекта Printer;
  • • Paste — выполняет операцию вставки объекта в OLE-koh- тейнер из буфера обмена Windows;
  • • PSet — рисует точку заданного цвета в заданных координатах на поверхности объекта;
  • • Refresh — принудительно перерисовывает форму или управляющий элемент в соответствии с его текущим содержимым;
  • • Render — рисует заданную часть рисунка на поверхности заданного объекта;
  • • Scale — задает систему координат для формы, управляющего элемента PictureBox или объекта Printer;
  • • ScaleX, ScaleY — преобразуют значения координат из одной системы в другую;
  • • SellectAll — выделяет все элементы формы;
  • • SetData — помещает графические данные в буфер обмена или в объект DataObject;
  • • SetFocus — помещает фокус клавиатуры на данный объект;
  • • Set Text — помещает в буфер обмена текстовые данные;
  • • Show — отображает на экране форму или М Dl-форму;
  • • Size — изменяет размеры управляющего элемента, определяемого пользователем;
  • • Zorder — определяет способ появления объекта в его контейнере: впереди или позади других объектов.
  • 1. Что такое объекты Visual Basic?
  • 2. Что определяют свойства?
  • 3. Что задают методы?
  • 4. Что такое события в Visual Basic?
  • 5. Приведите примеры основных объектов, свойств, методов и событий Visual Basic.

Методы и события форм

Для взаимодействия с пользователем в Windows Forms используется механизм событий. События в Windows Forms представляют стандартные события на C#, только применяемые к визуальным компонентам и подчиняются тем же правилам, что события в C#. Но создание обработчиков событий в Windows Forms все же имеет некоторые особенности.

Прежде всего в WinForms есть некоторый стандартный набор событий, который по большей части имеется у всех визуальных компонентов. Отдельные элементы добавляют свои события, но принципы работы с ними будут похожие. Чтобы посмотреть все события элемента, нам надо выбрать этот элемент в поле графического дизайнера и перейти к вкладке событий на панели форм. Например, события формы:

Чтобы добавить обработчик, можно просто два раза нажать по пустому полю рядом с названием события, и после этого Visual Studio автоматически сгенерирует обработчик события. Например, нажмем для создания обработчика для события Load :

И в этом поле отобразится название метода обработчика события Load. По умолчанию он называется Form1_Load .

Если мы перейдем в файл кода формы Form1.cs, то увидим автосгенерированный метод Form1_Load:

И при каждой загрузке формы будет срабатывать код в обработчике Form1_Load.

Как правило, большинство обработчиков различных визуальных компонентов имеют два параметра: sender — объект, инициировавший событие, и аргумент, хранящий информацию о событии (в данном случае EventArgs e ).

Но это только обработчик. Добавление же обработчика, созданного таким образом, производится в файле Form1.Designer.cs:

Для добавления обработчика используется стандартный синтаксис C#: this.Load += new System.EventHandler(this.Form1_Load)

Поэтому если мы захотим удалить созданный подобным образом обработчик, то нам надо не только удалить метод из кода формы в Form1.cs, но и удалить добавление обработчика в этом файле.

Однако мы можем добавлять обработчики событий и програмно, например, в конструкторе формы:

Порядок событий в формах Windows Forms Order of Events in Windows Forms

Особый интерес для разработчиков представляет порядок, в котором вызываются события в приложениях Windows Forms, для обеспечения обработки каждого из этих событий в свою очередь. The order in which events are raised in Windows Forms applications is of particular interest to developers concerned with handling each of these events in turn. Если ситуация требует аккуратной обработки событий, например когда производится перерисовка части формы, то необходимо знать точный порядок, в котором вызываются события во время выполнения. When a situation calls for meticulous handling of events, such as when you are redrawing parts of the form, an awareness of the precise order in which events are raised at run time is necessary. В этом разделе приведены некоторые сведения о порядке событий, возникающих на нескольких важных этапах жизненного цикла приложений и элементов управления. This topic provides some details on the order of events during several important stages in the lifetime of applications and controls. Конкретные сведения о порядке событий ввода мыши см. в разделе события мыши в Windows Forms. For specific details about the order of mouse input events, see Mouse Events in Windows Forms. Общие сведения о событиях в Windows Forms см. в разделе Общие сведения о событиях. For an overview of events in Windows Forms, see Events Overview. Дополнительные сведения о описывающего обработчиков событий см. в разделе Общие сведения об обработчиках событий. For details about the makeup of event handlers, see Event Handlers Overview.

Илон Маск рекомендует:  Что такое код iis изменения

События запуска и завершения работы приложения Application Startup and Shutdown Events


Классы Form и Control предоставляют набор событий, связанных с запуском и завершением приложения. The Form and Control classes expose a set of events related to application startup and shutdown. При запуске приложения Windows Forms события запуска главной формы вызываются в следующем порядке: When a Windows Forms application starts, the startup events of the main form are raised in the following order:

При закрытии приложения события запуска главной формы вызываются в следующем порядке: When an application closes, the shutdown events of the main form are raised in the following order:

Событие ApplicationExit класса Application вызывается после событий завершения работы основной формы. The ApplicationExit event of the Application class is raised after the shutdown events of the main form.

В Visual Basic 2005 содержатся дополнительные события приложений, такие как WindowsFormsApplicationBase.Startup и WindowsFormsApplicationBase.Shutdown. Visual Basic 2005 includes additional application events, such as WindowsFormsApplicationBase.Startup and WindowsFormsApplicationBase.Shutdown.

События, связанные с фокусом и проверками Focus and Validation Events

При изменении фокуса с помощью клавиатуры (при нажатии клавиш TAB, SHIFT+TAB и так далее), путем вызова методов Select или SelectNextControl, либо присвоением свойства ActiveControl текущей форме, события фокуса ввода класса Control происходят в следующем порядке: When you change the focus by using the keyboard (TAB, SHIFT+TAB, and so on), by calling the Select or SelectNextControl methods, or by setting the ActiveControl property to the current form, focus events of the Control class occur in the following order:

При изменении фокуса ввода с помощью мыши или путем вызова метода Focus события фокуса класса Control происходят в следующем порядке. When you change the focus by using the mouse or by calling the Focus method, focus events of the Control class occur in the following order:

Методы объекта Form

Программирование формы

Рассматривается самая старая часть спецификации JavaScript — программирование HTML-форм. Разбираются различные методы обработки событий, перехват отправки данных на сервер и способы организации обмена данными при помощи форм и JavaScript-кода.

Контейнер FORM

Если рассматривать программирование на JavaScript в исторической перспективе, то первыми объектами, для которых были разработаны методы и свойства, стали поля форм. Обычно контейнер FORM и поля форм именованы:

Поэтому в программах на JavaScript к ним обращаются по имени:

Того же эффекта можно достичь, используя коллекции форм и элементов, обращаясь к форме и к элементу либо по индексу, либо по имени:

Рассмотрим подробнее объект Form, который соответствует контейнеру FORM. Его свойства, методы и события используются для задания реакции на действия пользователя, например, изменения значений полей или нажатие кнопок.

Свойства, методы и события объекта Form
Свойства Методы События
length action method target encoding elements[] reset() submit() Reset Submit

Свойства объекта Form

Свойство action

Свойство action отвечает за вызов CGI-скрипта. В нем указывается URL этого скрипта. Но там, где можно указать URL, можно указать и его схему javascript:, например:

Обратите внимание на тот факт, что в контейнере FORM указан атрибут METHOD. В данном случае это сделано для того, чтобы к URL, заданному в атрибуте ACTION, не дописывался символ » ?». Дело в том, что методом доступа по умолчанию является метод GET. В этом методе при обращении к ресурсу из формы создается элемент URL под названием search. Этот элемент предваряется символом » ?», который дописывается в конец URL скрипта. В нашем случае это привело бы к неправильной работе JavaScript-кода, поскольку конструкция вида

провоцирует ошибку JavaScript. Метод POST передает данные формы скрипту в теле HTTP-сообщения, поэтому символ » ?» не добавляется к URL, и ошибка не генерируется. При этом применение void(0) отменяет перезагрузку документа, и браузер не генерирует событие Submit, т.е. не обращается к серверу при нажатии на кнопку, как это было бы при стандартной обработке формы.

Свойство method

Свойство method определяет метод доступа к ресурсам HTTP-сервера из программы-браузера. В зависимости от того, как автор HTML-страницы собирается получать и обрабатывать данные из формы, он может выбрать тот или иной метод доступа. На практике чаще всего используются методы GET и POST.

JavaScript-программа может изменить значение этого свойства. В предыдущем разделе метод доступа в форме был указан явно. Теперь мы его переопределим в момент исполнения программы:

5.1. Изменение метода формы (GET и POST) скриптом

По умолчанию установлен метод GET.

В данном примере стоит обратить внимание на два момента:

1. Прежде чем открывать окно предупреждения, следует нажать кнопку «Метод POST«. Если этого не сделать, то появится сообщение об ошибке JavaScript. Здесь все выглядит достаточно логично. Формирование URL происходит при генерации события submit, а вызов скрипта — после того, как событие сгенерировано. Поэтому вставить переопределение метода в обработчик события нельзя, так как к этому моменту будет уже сгенерирован URL, который, в свою очередь, будет JavaScript-программой с символом » ?» на конце.Переопределение метода должно быть выполнено раньше, чем произойдет событие Submit.

2. В тело документа через контейнер SCRIPT встроен JavaScript-код, который сообщает метод доступа, установленный в форме по умолчанию. Этот контейнер расположен сразу за контейнером FORM. Ставить его перед контейнером FORM нельзя, так как в момент получения интерпретатором управления объект FORM не будет создан, и, следовательно, работать с его свойствами не представляется возможным.

Никаких других особенностей свойство method не имеет. В данном свойстве можно указать и другие методы доступа, отличные от GET иPOST, но это требует дополнительной настройки сервера.

Свойство target

Свойство target определяет имя окна, в которое следует загружать результат обращения к CGI-скрипту. При этом всегда есть альтернативы: можно использовать значение этого свойства внутри JavaScript-программ для указания окна или фрейма, куда требуется загружать результат работы CGI-скрипта, а можно получить идентификатор окна или задействовать встроенный массив frames[0] и свойства окна opener, top и parent. Кроме того, для загрузки внешнего файла в некоторое окно или фрейм можно также применить метод window.open(). Все эти варианты будут продемонстрированы в разделе «Передача данных во фрейм«.

Свойство encoding

Свойство encoding объекта Form (а также атрибут enctype контейнера FORM ) задает, каким образом данные из формы должны быть закодированы перед их отправкой на сервер. Возможные значения:

Значения свойства encoding объекта Form
Значение Описание
application/x-www-form-urlencoded Это значение по умолчанию. Означает, что в данных, передаваемых на сервер, пробелы заменяются на «+», аспециальные символы заменяются на их 16-ричное ASCII значение, например, буква Щ заменяется на %D0%A9.
text/plain Пробелы заменяются на «+», но специальные символы не кодируются (передаются как есть).
multipart/form-data Никакие символы не кодируются (они передаются как есть). Данное значение необходимо указывать, если в форме имеются элементы отправки файлов: .

Коллекция elements[]

При генерации встроенного в документ объекта Form браузер создает и связанный с ним массив ( коллекцию ) полей формы elements[]. Обычно к полям обращаются по имени, но можно обращаться и по индексу массива полей формы:

Индексирование полей в массиве начинается с нуля. Общее число полей в форме f доступно двумя способами: как свойство массиваdocument.f.elements.length и как свойство объекта формы: document.f.length.

Методы объекта Form

Метод submit()

Метод submit() позволяет проинициировать передачу введенных в форму данных на сервер:

Как видите, кнопки отправки ( submit ) у формы нет, но нажав на ссылку, мы выполняем отправку данных на сервер. Обычно при такой «скрытой» отправке данных на сервер браузеры, в целях безопасности, запрашивают подтверждение, действительно ли пользователь желает отправить данные. Отправка данных путем вызова метода submit() имеет отличия от нажатия пользователем кнопки INPUT типаTYPE=submit ; их мы рассмотрим в конце лекции.

Метод reset()


Метод reset() (не путать с обработчиком события onReset, рассматриваемым ниже) позволяет восстановить значения полей формы, заданные по умолчанию. Другими словами, вызов метода reset() равносилен нажатию на кнопку INPUT типа TYPE=reset, но при этом саму эту кнопку создавать не требуется.

В данном примере если кликнуть по гипертекстовой ссылке, то в форме происходит восстановление значений полей по умолчанию.

Дата добавления: 2020-05-25 ; просмотров: 427 ; ЗАКАЗАТЬ НАПИСАНИЕ РАБОТЫ

Свойства, методы и события экранных форм

Формы пользователя

Формы пользователя – это диалоговые окна, предназначенные для создания собственного интерфейса при работе с программными модулями проекта, используя объект UserForm. При помощи форм пользователя VBA , которые называются также экранными формами, можно создавать диалоговые окна для вывода данных или получения значений от пользователя в виде, требуемом программе пользователя. Хотя во многих случаях для этих целей можно применять функции MsgBox и InputBox (или метод InputBox), при разработке сложных проектов возможности их недостаточны. В экранных формах пользователя можно в одном диалоговом окне задавать сразу несколько опций, выбирать пункты из списка или вводить несколько значений, наподобие диалоговым окнам приложений MS Office.

Для вставки экранной формы в приложение нужно выполнить следующие действия.

1. Открыть рабочую книгу.

2. Войти в редактор Visual Basic, нажав комбинацию клавиш или щёлкнув по кнопке .

3. Если в окне проекта не появится окно Project – VBAProject, то выбрать в меню View пункт Project Exsplorer.

4. В окне проекта щёлкнуть правой кнопкой мыши на элементе
ЭтаКнига.

5. В контекстном меню выполнить команду Insert>UserForm (Вставка > Экранная форма). В рабочую книгу будет вставлена экранная форма UserForm1 и Панель элементов ToolBoox (рис.15).

Рис. 15.Вставленная новая экранная форма

Новая экранная форма представляет собой пустое окно со строкой заголовка UserForm1. Это та основа, на которой пользователь может создать собственные диалоговые окна и окна других типов. Если панель ToolBoox не появится, нужно выбрать в меню View пункт ToolBoox или нажать кнопку на панели Microsoft Visual Basic.

Свойства, методы и события экранных форм

Форма представляет собой интерфейс пользователя. Она может содержать меню, кнопки, окна списков, полосы прокрутки и другие элементы, существующие в программах MS Office. VBA по умолчанию предлагает форму, которая имеет имя UserForm1, со стандартной сеткой (группа равномерно расположенных точек). Сетка служит для удобства размещения элементов пользовательского интерфейса. Шаг сетки можно изменить выполнив команду Сервис, Параметры (Tool, Options), закладка Общие (General). Форма UserForm1 может быть переименована, и её размеры могут быть изменены при разработке приложения. При необходимости можно добавить новые формы. Каждая форма при работе программы будет окном пользовательского интерфейса. Форма (UserForm) является объектом и обладает большим набором свойств, методов и событий.

Объекты, методы, свойства, события

Объектно-ориентированное программирование на примере языка VBA

Основные понятия объектно-ориентированного программирования

В основе объектно-ориентированного программирования (ООП) лежат следующие базовые понятия: объект, свойство объекта, метод обработки, событие, класс объектов.

Определение 1. Объект — совокупность свойств (параметров) определенных сущностей и методов их обработки (программных средств), т.е. объект– это нечто целое, объединяющее некоторые данные, чем можно управлять с помощью кода VBA. Например, любое приложение Windows – Word, Excel, Explorer и другие являются объектом языка, который называется Application (Приложение); окно программы – объект Windows; документ HTML – объект Document; диапазон ячеек в Excel – объект Range и т.д.

Объект содержит инструкции (программный код), определяющие действия, которые может выполнять объект, и обрабатываемые данные. Один объект может выступать объединением вложенных в него по иерархии других объектов. В частном случае, в VBA объектом являются элементы пользовательского интерфейса, которые создаются на Форме пользователя (UserForm) или на рабочем листе, а также рабочая книга и её элементы.

Объекты могут объединяться в классы, т.е. объект является экземпляром класса.

Определение 2. Класс — совокупность объектов, характеризующихся общностью применяемых методов обработки или свойств.

Определение 3. Свойство — характеристика объекта, его параметр.

Все объекты наделены определенными свойствами, которые в совокупности выделяют объект из множества других объектов. Свойства объектов различных классов могут «пересекаться», т.е. возможны объекты обладающие одинаковыми свойствами:

Одним из свойств объекта являются метод его обработки.

Определение 4. Метод — программа действий над объектом или его свойствами.

Метод рассматривается как программный код, связанный с определенным объектом; осуществляет преобразование свойств, изменяет поведение объекта. Объект может обладать набором заранее определенных встроенных методов обработки, либо созданных пользователем или заимствованных в стандартных библиотеках, которые выполняются при наступлении заранее определенных событий, например, однократное нажатие левой кнопки мыши, вход в поле ввода, выход из поля ввода, нажатие определенной клавиши и т.п.

Проводя лингвистические аналогии, можно сказать, что объекты – это существительные, свойства – это прилагательныеметоды – глаголы в предложениях языка VBA.

Определение 5. Событие — изменение состояния объекта.

Внешние события генерируются пользователем (например, клавиатурный ввод или нажатие кнопки мыши, выбор пункта меню, запуск макроса); внутренние события генерируются системой.

Существуют различные объектно-ориентированные технологии и методики проектирования программных продуктов, которые должны обеспечить выполнение важнейших принципов объектного подхода:

¨ Инкапсуляция (замыкание) свойств данных и программ в объекте. Инкапсуляция – это скрытие информации. При ООП возможен доступ к объекту только через его методы и свойства. Внутренняя структура объекта скрыта от пользователя, т.е. объекты – это самостоятельные сущности, отделенные от внешнего мира. Инкапсуляция позволяет изменять реализацию объектов любого класса без опасений, что это вызовет нежелательные побочные эффекты в программной системе. Это мощное средство обеспечивает многократное использование одного и того же программного кода, позволяя собирать программу из готовых модулей, как здание из отдельных кирпичиков, но различной архитектуры и функционального назначения.

¨ Наследование – это возможность выделить свойства, методы и события одного объекта и приписать их другому объекту, иногда с их модификацией. Класс может иметь образованные от него подклассы. При построении подклассов осуществляется наследование данных и методов обработки объектов исходного класса. Механизм наследования позволяет переопределить или добавить новые данные и методы их обработки, создать иерархию классов. С точки зрения программиста, новый класс должен содержать только коды и данные для новых или изменяющихся методов.

¨ Полиморфизм – способность объекта реагировать на запрос (вызов метода) сообразно своему типу, при этом одно и то же имя метода может использоваться для различных классов объектов. Например, команда Print, будет по-разному воспринята черно-белым или цветным принтером.

Объекты, методы, свойства, события

Объектам VBA присуща функциональность – они действуют определенным образом и могут откликаться на определенные ситуации. При этом, если свойства объекта определяют его внешний вид и состояние, методы объекта определяют те задачи, которые может выполнить данный объект. Методы, по сути дела, представляют собой сегмент программного кода, внедренного в объект.

Существует определенный формат программного кода, задающего установку свойства, получения значения свойства и использование метода:

Объект.Свойство =Значение

Переменная=Объект.Свойство

Объект.Метод [Параметр1 [… …]

Здесь Объект – имя настраиваемого объекта; Свойство – это характеристика, которую нужно изменить; Метод – это команда, которая используется для изменения объекта; Значение – это новая установка свойства; Параметр – это аргумент, используемый методом.

Пример 1. Следующий пример показывает, как можно изменить текст в строке заголовка окна приложения посредством установки нового значения свойству Caption объекта Application:


Application.Caption = “Пример установки свойства”

Различные типы объектов могут иметь различные методы.

Пример 2. Пример применения метода Show (показать) к объекту UserForm (Форма Пользователя) :

UserForm 1. Show

В результате применения этого метода Форма Пользователя будет выведена на активный рабочий лист текущей книги Excel.

Объекты могут реагировать на события – действия пользователя или другие внешние действия, например, щелчок по кнопке, изменение текста, нажатие клавиши и др. Событие представляет собой действие, распознаваемое объектом, для которого можно запрограммировать отклик.

Илон Маск рекомендует:  Как сделать предпросмотр картинки с открытием оригинала с использованием Framework.

Иногда свойства и методы объекта оказываются связанными в том смысле, что выполнение некоторого метода приводит к изменению свойств объекта. В свою очередь, изменение некоторых свойств может вызвать наступление событий. Очевидно, что применение метода Move(переместить), допустим, к тому же объекту UserFormизменит значения его свойств (Left и Top), определяющих его местоположение. С другой стороны, результатом принудительного изменения размеров объекта , очевидно, будет событие Resize.

Программа может обрабатывать два основных типа событий: инициируемые пользователем и генерируемые системой. События, инициируемые пользователем, возникают в результате его действий: нажатие клавиши, щелчки кнопками мыши. Но есть события, являющиеся следствием действий пользователя. Например, снятие или установка Флажка пользователем изменяет значение его свойства Value, а это означает наступление события Change.

Таким образом, любое из действий пользователя может вызвать целый набор событий, и порядок их вызова может быть важным. Основными действиями пользователя, генерирующими вызов событий в программе, являются следующие:

Программируем формы

Контейнер FORM

Если рассматривать программирование на JavaScript в исторической перспективе, то первыми объектами, для которых были разработаны методы и свойства, стали поля форм. Обычно контейнер FORM и поля форм именованы:

Поэтому в программах на JavaScript к ним обращаются по имени:

Того же эффекта можно достичь, используя коллекции форм и элементов, обращаясь к форме и к элементу либо по индексу, либо по имени:

Рассмотрим подробнее объект Form , который соответствует контейнеру FORM . Его свойства, методы и события используются для задания реакции на действия пользователя, например, изменения значений полей или нажатие кнопок.

Свойства, методы и события объекта Form
Свойства Методы События

Свойства объекта Form

Свойство action

Свойство action отвечает за вызов CGI-скрипта . В нем указывается URL этого скрипта. Но там, где можно указать URL, можно указать и его схему javascript: , например:

Обратите внимание на тот факт, что в контейнере FORM указан атрибут METHOD . В данном случае это сделано для того, чтобы к URL, заданному в атрибуте ACTION , не дописывался символ » ?». Дело в том, что методом доступа по умолчанию является метод GET . В этом методе при обращении к ресурсу из формы создается элемент URL под названием search . Этот элемент предваряется символом » ?», который дописывается в конец URL скрипта. В нашем случае это привело бы к неправильной работе JavaScript-кода, поскольку конструкция вида

провоцирует ошибку JavaScript. Метод POST передает данные формы скрипту в теле HTTP-сообщения, поэтому символ » ?» не добавляется к URL, и ошибка не генерируется. При этом применение void(0) отменяет перезагрузку документа, и браузер не генерирует событие Submit , т.е. не обращается к серверу при нажатии на кнопку, как это было бы при стандартной обработке формы.

Свойство method

Свойство method определяет метод доступа к ресурсам HTTP-сервера из программы-браузера. В зависимости от того, как автор HTML-страницы собирается получать и обрабатывать данные из формы, он может выбрать тот или иной метод доступа . На практике чаще всего используются методы GET и POST .

JavaScript-программа может изменить значение этого свойства. В предыдущем разделе метод доступа в форме был указан явно. Теперь мы его переопределим в момент исполнения программы:

По умолчанию установлен метод GET .

В данном примере стоит обратить внимание на два момента:

  1. Прежде чем открывать окно предупреждения , следует нажать кнопку «Метод POST «. Если этого не сделать, то появится сообщение об ошибке JavaScript. Здесь все выглядит достаточно логично. Формирование URL происходит при генерации события submit , а вызов скрипта — после того, как событие сгенерировано. Поэтому вставить переопределение метода в обработчик события нельзя, так как к этому моменту будет уже сгенерирован URL, который, в свою очередь, будет JavaScript-программой с символом » ?» на конце. Переопределение метода должно быть выполнено раньше, чем произойдет событие Submit .
  2. В тело документа через контейнер SCRIPT встроен JavaScript-код, который сообщает метод доступа , установленный в форме по умолчанию. Этот контейнер расположен сразу за контейнером FORM . Ставить его перед контейнером FORM нельзя, так как в момент получения интерпретатором управления объект FORM не будет создан, и, следовательно, работать с его свойствами не представляется возможным.

Никаких других особенностей свойство method не имеет. В данном свойстве можно указать и другие методы доступа , отличные от GET и POST , но это требует дополнительной настройки сервера.

Свойство target

Свойство target определяет имя окна , в которое следует загружать результат обращения к CGI-скрипту . При этом всегда есть альтернативы: можно использовать значение этого свойства внутри JavaScript-программ для указания окна или фрейма, куда требуется загружать результат работы CGI-скрипта , а можно получить идентификатор окна или задействовать встроенный массив frames [0] и свойства окна opener , top и parent . Кроме того, для загрузки внешнего файла в некоторое окно или фрейм можно также применить метод window.open() . Все эти варианты будут продемонстрированы в разделе «Передача данных во фрейм «.

Свойство encoding

Свойство encoding объекта Form (а также атрибут enctype контейнера FORM ) задает, каким образом данные из формы должны быть закодированы перед их отправкой на сервер. Возможные значения:

Значения свойства encoding объекта Form
Значение Описание
application/x-www-form-urlencoded Это значение по умолчанию. Означает, что в данных, передаваемых на сервер, пробелы заменяются на «+», а специальные символы заменяются на их 16-ричное ASCII значение, например, буква Щ заменяется на %D0%A9 .
text/plain Пробелы заменяются на «+», но специальные символы не кодируются (передаются как есть).
multipart/form-data Никакие символы не кодируются (они передаются как есть). Данное значение необходимо указывать, если в форме имеются элементы отправки файлов: .
Коллекция elements[]

При генерации встроенного в документ объекта Form браузер создает и связанный с ним массив ( коллекцию ) полей формы elements [] . Обычно к полям обращаются по имени, но можно обращаться и по индексу массива полей формы:

Индексирование полей в массиве начинается с нуля. Общее число полей в форме f доступно двумя способами: как свойство массива document.f. elements . length и как свойство объекта формы: document.f. length .

Методы объекта Form

Метод submit()

Метод submit () позволяет проинициировать передачу введенных в форму данных на сервер:

Как видите, кнопки отправки ( submit ) у формы нет, но нажав на ссылку, мы выполняем отправку данных на сервер. Обычно при такой «скрытой» отправке данных на сервер браузеры, в целях безопасности , запрашивают подтверждение, действительно ли пользователь желает отправить данные. Отправка данных путем вызова метода submit () имеет отличия от нажатия пользователем кнопки INPUT типа TYPE= submit ; их мы рассмотрим в конце лекции.


Метод reset()

Метод reset () (не путать с обработчиком события onReset , рассматриваемым ниже) позволяет восстановить значения полей формы, заданные по умолчанию. Другими словами, вызов метода reset () равносилен нажатию на кнопку INPUT типа TYPE= reset , но при этом саму эту кнопку создавать не требуется.

В данном примере если кликнуть по гипертекстовой ссылке, то в форме происходит восстановление значений полей по умолчанию.

События объекта Form

Событие Submit

Событие Submit возникает (и соответствующий обработчик события onSubmit вызывается) при нажатии пользователем на кнопку типа submit или при выполнении метода submit () . Действие по умолчанию, которое выполняет браузер при возникновении этого события — отправка введенных в поля формы данных на сервер, указанный в атрибуте ACTION , с помощью метода, указанного в атрибуте METHOD , с использованием способа кодирования, указанного в атрибуте ENCTYPE , и с указанием того, что результаты работы CGI-скрипта должны быть показаны в окне или фрейме с именем, указанным в атрибуте TARGET .

Фукцию обработки этого события можно переопределить и даже вовсе отменить. Для этой цели введен атрибут onSubmit=»код_программы» у контейнера

В этом примере следует обратить внимание на конструкцию return TestBeforeSend() . Сама функция TestBeforeSend() возвращает значения true или false . Соответственно, данные либо отправляются на сервер, либо нет.

Событие Reset

Событие Reset возникает (и соответствующий обработчик события onReset вызывается) при нажатии пользователем на кнопку типа reset или при выполнении метода reset () . Действие по умолчанию, которое выполняет браузер при возникновении этого события — восстановление значений по умолчанию в полях формы. Однако функцию обработки этого события можно переопределить и даже вовсе отменить. Для этой цели введен атрибут onReset=»код_программы» у контейнера

Здесь команда return false предотвратила восстановление значения поля. Команда return true , равно как и отсутствие оператора return , позволило бы браузеру продолжить обработку события — и восстановить значение поля.

Методы и события форм

Width

frmForm1.Caption = «������»

������� 5.2. �������� ������� ����

Initialize

Activate

Deactivate

Click

Private Sub UserForm_Activate()

frmForm1.Caption = «������ �� ����� ��������� � �������»

End Sub

Private Sub UserForm_Click()

frmForm1.Height = frmForm1.Height / 2

frmForm1.Caption = «������ ��� ��� ���!»

End Sub

������� 5.3. �������� ������ ����

Unload

Private Sub UserForm_Initialize()

Load frmForm2

frmForm2.Show

End Sub

Private Sub UserForm_Click()

frmForm2.Hide

End Sub

Private Sub UserForm_Click()

frmForm2.Show

End Sub

frm

frmMyForm

lbl

lblInfo

txt

txtInput


cmd

cmdExit

chk

chkSound

opt

optLevel

lsb

lsbTypes

fra

fraChoices

vcb

vcbSpeed

pic

picChema

BackColor

Caption

Enabled

ForeColor

Picture

PicturePosition

Visible

Enabled

ForeColor

MaxLength

PasswordChar

txtResult.Text=» «

������� 5.8. �������� �������

Caption

ForeColor

Picture

PicturePosition

������� 5.9. �������� ������

ListIndex

Private Sub UserForm_Initialize()

List1.AddItem «����»

List1.AddItem «����»

List1.AddItem «�����»

List1.AddItem «������»

List1.AddItem «�������»

End Sub

Private Sub List1_DblClick()

List2.AddItem List1.Text

List1.RemoveItem


List1.ListIndex

End Sub

Private Sub List2_dblClick()

List1.AddItem List2.Text

List2.RemoveItem

List2.ListIndex

BestProg

События и делегаты. Понятие события. Взаимодействие между событиями

Содержание

1. Что такое событие в C#? Какая целесообразность использования событий в языке C#?

Событие – это автоматическое сообщение о том, что в программе состоялось некоторое действие.

На выполнение того или другого события программа может соответственно реагировать. Реакция на событие осуществляется с помощью так называемых обработчиков события. Обработчик события – это обычный метод, который выполняет некоторые действия в программе, в случае если состоялось (сгенерировалось) событие.

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

На рисунке 1 схематично отображена работа события MyEvent .

Рис. 1. Вызов цепи методов для события MyEvent

2. Какая общая форма объявления события? Ключевое слово event . Пример

Объявление события осуществляется на основе ранее объявленного типа делегата. Общая форма объявления события:

  • делегат_события – имя типа делегата, который используется для объявления события;
  • имя_события – конкретное имя объекта (переменной) типа «событие».

Пример. Объявление события с именем MyEvent на основе типа делегата MyDelType .

Более подробно об объявлении типа делегата и объявлении переменной делегата описывается в теме:

3. Какие требования к делегату, который будет использоваться для обработки события?

Для того, чтобы можно было обрабатывать (запускать) списки обработчиков события, делегат не должен возвращать значение. То есть, делегат может возвращать тип void .

Если делегат возвращает значение, то вызывается последний метод (обработчик) из сформированного списка методов.

4. Какие требования относятся к методу, который может быть обработчиком некоторого события?

Основное требование – метод может иметь точно такую же сигнатуру как и делегат, на основе которого объявлено событие.

Если нужно организовать список методов, которые вызовутся при вызове события, тогда тип делегата и метод должны возвращать значение void (ничего не возвращать). Если есть список методов, возвращающих значение, то при запуске события из этого списка вызывается последний метод.

5. Как осуществляется регистрация метода в событии? Пример

Чтобы зарегистрировать метод для обработки данного события нужно использовать операторы ‘=’ или ‘+=’ .

Пример.

Пусть в теле некоторого класса объявляется:

  • событие с именем MyEvent ;
  • метод обработки события (обработчик события) MyMethod1() ;
  • обработчик события MyMethod2() ;
  • обработчик события MyMethod3() .

Методы имеют точно такую же сигнатуру, как и тип делегата, на основе которого объявлено событие MyEvent . Чтобы зарегистрировать методы MyMethod1() , MyMethod2() , MyMethod3() для события MyEvent нужно написать следующий программный код:

В этом случае образуется список (цепочка) из трех методов. Методы в списке идут в той же последовательности, в которой они были зарегистрированы (добавлены) в событие.

Если методы не возвращают никакого значения, то при вызове события будут выполняться все методы с списке в порядке их добавления. Если методы возвращают значение, то при вызове события будет выполняться последний метод из списка.

6. Какая последовательность шагов в программе для организации списка обработчиков событий, которые будут вызваться при вызове (запуске) события

Чтобы организовать список обработчиков события (методов) нужно выполнить такую последовательность шагов:


  1. Объявить тип делегата в классе.
  2. Объявить событие в данном классе или создать другой класс, который содержит объявления события.
  3. В некотором методе (программном коде) создать список обработчиков (методов), которые будут вызываться при вызове данного события. Это осуществляется с помощью операторов ‘=’ и ‘+=’ . Создание списка означает регистрацию обработчиков для данного события.
  4. Вызвать событие (запустить на выполнение) из этого метода.

7. Пример использования события для случая если методы и события объявлены в одном классе

8. Пример использования события, которое объявлено в отдельном классе. Обработчики события объявлены в другом классе

Пусть в модуле CalcFigures.cs объявлен класс, содержащий следующее описание

В другом модуле Form1.cs объявлен класс, который демонстрирует использование методов из класса CalcFigures . Листинг модуля Form1.cs следующий:

Свойства и характеристики формы (Form) в Дельфи (Delphi)

Как и любой другой визуальный компонент, форма имеет свойства, методы и события, общие для всех визуальных компонентов, многие из которых уже были рассмотрены в статье События Delphi (События визуальных компонентов), а так же в статьях, посвященных интерфейсным элементам.

Наряду с ними у формы есть и спефические свойства, методы и события, определяемые ее особым значением. Некоторые из них характеризуют форму как главный объект приложения, скажем, свойство BorderIcons, другие присущи форме как контейнеру других компонентов, например, свойства AutoScroll и ActiveControl.

Система Delphi при добавлении новой формы в проект автоматически создает один экземпляр класса (Form1, Form2 и т. д.), внося соответствующие изменения в файл проекта, например, добавляя строку кода:

Управлять процессом автоматического создания форм можно, непосредственно редактируя файл проекта (не рекомендуется делать неопытным программистам) или выполняя настройки в окне параметров проекта (список Auto-create forms на странице Form). Если форма переведена из этого списка в список Available forms доступных форм проекта, то инструкция ее создания исключается из файла проекта, и программист в ходе выполнения приложения должен динамически создать экземпляр этой формы.

На данном скринште мы видим, что Form1 будет создана при запуске программы, а Form2 необходимо будет создать динамически при выполнении программы.

Метод Сreate

Для создания экземпляров форм служит метод (конструктор) Сreate. Сам класс формы обычно предварительно описывается при конструировании приложения, и для формы уже существуют файлы формы (dfm) и программного модуля (pas).

В вышеуказанной процедуре создается форма Form2, принадлежащая объекту приложения и имеющая заголовок новая форма.

События формы (Form)

При создании и использовании формы генерируются следующие события типа TNotifyEvent, указанные в порядке их возникновения:

  1. OnCreate;
  2. OnShow;
  3. OnResize;
  4. OnActivate;
  5. OnPaint.

Событие OnCreate

Событие OnCreate генерируется только один раз— при создании формы, остальные события происходят при каждом отображении, активизации и каждой прорисовке формы соответственно.

В обработчик события OnCreate обычно включается код, устанавливающий начальные значения свойств формы, а также ее элементов управления, т. е. выполняющий начальную инициализацию формы в дополнение к установленным на этапе разработки приложения параметрам. Кроме того, в обработчик включаются дополнительные операции, которые должны происходить однократно при создании формы, например, чтение к из файла некоторой информации и загрузка ее в список.

Приведем в качестве примера процедуру, обрабатывающую событие OnCreate формы Form2:

При создании форма получает новый заголовок пример формы, в комбинированный список ComboBox2 загружаются данные из файла list.txt, кнопка Button3 блокируется, а фокус ввода устанавливается на редактор Edit1.

Свойство Visible

Из всех созданных форм Delphi при выполнении приложения автоматически делает видимой главную форму, для этого свойство Visible этой формы устанавливается в значение True. Для остальных форм значение данного свойства по умолчанию равно False, и после запуска приложения они на экране не отображаются. Если формы создаются вручную, то их отображение и скрытие в процессе работы приложения регулируется программистом через свойство Visible. Даже если форма невидима, ее компонентами можно управлять, например, из других форм.

Дочерние формы многодокументного приложения становятся видимыми на экране сразу после их создания.

В вышеуказанных процедурах нажатие кнопок btnShowForm2 и btnHideForm2, расположенных в форме Form1, приводит, соответственно, к отображению и скрытию формы Form2.

Методы Show и Hide

Управлять видимостью форм на экране можно также с помощью методов Show и Hide. Процедура Show отображает форму в немодальном режиме, при этом свойство Visible устанавливается в значение True, а сама форма переводится на передний план. Процедура Hide скрывает форму, устанавливая ее свойство Visible в значение False.

Если окно видимо, то вызов метода Show переводит форму на передний план и передает ей фокус ввода.

Пример отображения и скрытия формы:

Здесь нажатие кнопок btnShowForm3 и btnHideForm3, расположенных В форме Form1, приводит соответственно к отображению на экране и удалению с экрана формы Form3.

В момент отображения формы на экране ее свойство visible принимает значение True, и возникает событие OnShow. Соответственно при скрытии формы свойство visible принимает значение False, и возбуждается событие OnHide.

События OnActivate и OnDeActivate

При получении формой фокуса ввода, например при нажатии кнопки мыши в области формы, происходит ее активизация и возникает событие OnActivate, а при потере фокуса— событие OnDeActivate.

Событие OnPaint

Событие OnPaint генерируется при необходимости перерисовки формы, например, при активизации формы, если до этого часть ее была закрыта другими окнами.

Метод Сlose — закрывает форму

Для закрытия формы используется метод close, который, если это возможно, удаляет ее с экрана. В случае закрытия главной формы прекращается работа врего приложения.

В вышеуказанной процедуре кнопка btnClose закрывает форму Form2. Форма делается невидимой, но не уничтожается. Для этой кнопки полезно задать соответствующий заголовок (свойство Caption), например, Закрыть.

Процедура Close не уничтожает созданный экземпляр формы, и форма может быть снова вызвана на экран, в частности, с помощью методов Show или ShowModal.


Уничтожение формы (Release, Free или Destroy)

Уничтожение формы происходит с помощью методов Release, Free или Destroy, после чего работа с этой формой становится невозможна, и любая попытка обратиться к ней или ее компонентам вызовет исключение (ошибку). Необходимость уничтожения формы может возникнуть при оформлении заставок или при разработке больших приложений, требующих экономии оперативной памяти. Предпочтительным методом удаления формы считается метод Free, поскольку он предварительно проверяет возможность удаления. Например, в процедуре

В приведенной процедуре кнопка btnDestroy уничтожает форму Form3. Для этой кнопки полезно задать соответствующий заголовок, например Удалить.

События при закрытии и уничтожении формы

При закрытии и уничтожении формы генерируются следующие события, указанные в порядке их возникновения:

Событие OnCloseQuery

Событие OnCloseQuery типа TcloseQueryEvent возникает в ответ на попытку закрытия формы. Обработчик события получает логическую переменную-признак CanClose, определяющую, может ли быть закрыта данная форма. По умолчанию эта переменная имеет значение True, и форму можно закрыть. Если установить параметр CanClose в значение False, то форма остается открытой. Такую возможность стоит использовать, например, для подтверждения закрытия окна или проверки, сохранена ли редактируемая информация на диске. Событие OnCloseQuery вызывается всегда, независимо от способа закрытия формы.

Приведем в качестве примера процедуру закрытия формы:

Здесь при закрытии формы Form2 выдается запрос на подтверждение операции, который представляет собой модальное диалоговое окно с текстом и двумя кнопками — Yes и No. Нажатие кнопки Yes вызывает закрытие формы, при нажатии кнопки No закрытие формы не происходит.

Событие OnClose

Событие OnClose типа TCioseEvent возникает непосредственно перед закрытием формы. Обычно оно используется для изменения стандартного поведения формы при закрытии. Для этого обработчику события передается переменная Action типа TCloseAction, которая может принимать следующие значения:

  • caNone (форму закрыть нельзя);
  • caHide (форма делается невидимой);
  • caFree (форма уничтожается, а связанная с ней память освобождается);
  • caMinimize (окно формы сворачивается) — значение по умолчанию для MDI-форм.

При закрытии окна методом Close переменная Action по умолчанию получает значение caHide, и форма делается невидимой. При уничтожении формы, например, методом Destroy, переменная Action по умолчанию получает значение caFree, и форма уничтожается.

Событие OnClose возникает при закрытии формы щелчком мыши на кнопке закрытия системного меню или при вызове метода Close. Когда закрывается главная форма приложения, все остальные окна закрываются без вызова события OnClose.

В выше указанной процедуре при закрытии формы Form2 проверяется признак модификации содержимого редактора Memo1. Если информация в Memo1 была изменена, то форма не закрывается.

Событие onDestroy

Событие onDestroy типа TNotifyEvent возникает непосредственно перед уничтожением формы и обычно используется для освобождения ресурсов.

Событие onResize

При каждом изменении размеров формы в процессе выполнения приложения возникает событие onResize типа TNotifyEvent. В обработчике этого события может размещаться код, например, выполняющий изменение положения и размеров элементов управления окна, не имеющих свойства Align.

В форме Form1 находятся два компонента: сетка строк StringGrid1 и кнопка Button1. Эти компоненты расположены в форме следующим образом:

  • сетка StringGrid1 занимает всю ширину клиентской области формы Form3, отступы слева и справа составляют 10 пикселов;
  • кнопка Button1 (Закрыть) выровнена по правому краю сетки StringGrid1;
  • расстояния между сеткой, кнопкой, верхним и нижним краями формы составляют 5 пикселов.

При изменении размеров формы Form1 выполняется пересчет параметров, задающих размеры и положение сетки строк, а также положение кнопки.

Cвойство FormStyle — стиль формы

Стиль формы определяется свойством FormStyle типа TFormstyle, принимающим следующие значения:

  • fsNormal (стандартный стиль, используемый для большинства окон, в том числе и диалоговых);
  • fsMDiChild (дочерняя форма в многодокументном приложении);
  • fsMDiForm (родительская форма в многодокументном приложении);
  • fsStayOnTop (форма, которая после запуска всегда отображается поверх других окон) — обычно используется при выводе системной информации или информационной панели программы.

Форма может изменять стиль динамически — в процессе выполнения программы, например, при выборе пункта меню. При изменении формой стиля возникает событие OnShow.

Пример динамического изменения стиля формы:

При выборе пункта меню mnuTop форма переключает свой стиль между значениями fsNormal и fsStayOnTop. Смена стиля отображается графически галочкой в заголовке этого пункта меню.

Cвойство BorderStyle — свойства рамки формы

Каждая форма имеет ограничивающую рамку. Вид и поведение рамки определяет свойство BorderStyle типа TFormBorderstyle. Оно может принимать следующие значения:

  • bsDialog (диалоговая форма);
  • bsSingle (форма с неизменяемыми размерами);
  • bsNone (форма не имеет видимой рамки и заголовка и не может изменять свои размеры) — часто используется для заставок;
  • bsSizeable (обычная форма с изменяемыми размерами) — по умолчанию, имеет строку заголовка и может содержать любой набор кнопок;
  • bsToolwindow (форма панели инструментов);
  • bsSizeToolwin (форма панели инструментов с изменяемыми размерами).

Визуальное отличие между диалоговой и обычной формами заключается в том, что диалоговая форма может содержать в своем заголовке только кнопки закрытия и справки. Кроме того, пользователь не может изменять размеры диалоговой формы.

Невозможность изменения размеров форм некоторых стилей относится только к пользователю — нельзя с помощью мыши передвинуть границу формы в ту или иную сторону. Программно при выполнении приложения для формы любого стиля можно устанавливать любые допустимые размеры окна, а также изменять их.

Пример программного изменения размеров формы:

При нажатии кнопки btnResizeForm ширина формы Form2 увеличивается на 100 пикселов, даже если ее свойство BorderStyle имеет значение, равное bsDialog, bsSingle или bsNone.

Метод ShowModal

Если установить диалоговый стиль формы, то она не становится модальной и позволяет пользователю переходить в другие окна приложения. Для запуска формы, в том числе любой диалоговой, в модальном режиме следует использовать метод ShowModal. Таким образом, стиль определяет внешний вид формы, но не ее поведение.

Cвойство BorderIcons

В области заголовка могут отображаться 4 вида кнопок. Реализуемый набор кнопок определяет свойство BorderIcons типа TBorderIcons, которое может принимать комбинации следующих значений:


  • blSystemMenu (окно имеет системное меню и может содержать кнопки системного меню);
  • blMinimize (окно содержит кнопку свертывания);
  • blMaximize (окно содержит кнопку развертывания/восстановления);
  • blHelp (окно содержит кнопку справки, которая отображает вопросительный знак и вызывает контекстно-зависимую справку).

Системное меню представляет собой набор общих для всех окон Windows команд, например, Свернуть или Закрыть. При наличии у окна системного меню в области заголовка слева отображается значок приложения, при щелчке на котором и появляются команды этого меню, а в области заголовка справа имеется кнопка закрытия формы (см. скриншот).

Различные значения свойства BorderIcons не являются независимыми друг от друга. Так, если отсутствует системное меню, то ни одна кнопка не отображается. Если имеются кнопки развертывания и свертывания, то не отображается кнопка справки. Возможность появления кнопок также зависит от стиля формы. Например, отображение кнопок развертывания и свертывания возможно только для обычной формы и формы панели инструментов с изменяемыми размерами.

Обычно стиль формы и набор кнопок заголовка задаются на этапе разработки приложения в окне Инспектора объектов. При этом в проектируемой форме всегда видны обычная рамка и три кнопки (развертывания, свертывания и закрытия формы), независимо от значения свойств FormStyle и BorderIcons. Заданные стиль формы и набор кнопок становятся видимыми при выполнении программы.

Форма включает в себя клиентскую и неклиентскую области. Неклиентская область занята рамкой, заголовком и строкой главного меню. Обычно эта область прорисовывается Windows и программистом не затрагивается. При необходимости изменить отображение в неклиентской области программист может перехватить и обработать сообщение WM_NCPaint.

Cвойства ClientWidth и ClientHeight

В клиентской области обычно размещаются различные элементы управления, выводится текст или отображается графика. Аналогично тому как свойства Width и Height определяют размеры всей формы, свойства ClientWidth и ClientHeight типа Integer задают ширину и высоту (в пикселах) клиентской части формы.

В вышеуказанной процедуре значения размеров клиентской области выводятся в заголовке формы.

Обычно форму перетаскивают мышью, указатель которой устанавливается в любом месте области заголовка. При необходимости можно переместить форму и при помещении указателя на ее клиентскую область, для чего требуется описать соответствующие операции программно. Одним из способов является перехват системного сообщения WM_NCHitTest. Для этого создается процедура FormMove, которая анализирует, в каком месте формы находится указатель мыши при нажатии кнопки. Код местоположения указателя мыши содержится в поле Result системного сообщения типа TMessage. Если значение Result равно 1, что соответствует нажатию кнопки мыши в клиентской области, то полю Result присваивается новое значение, равное 2, имитирующее нахождение указателя мыши в области заголовка. В процедуре FormMove первая инструкция inherited осуществляет вызов предопределенного обработчика перехватываемого события.

Чтобы указать среде Delphi, что процедура FormMove является обработчиком события WM_NCHitTest, при ее описании в классе формы TForm1 используется специальный синтаксис, включающий ключевое слово message. Как обработчик системного сообщения, процедура содержит один параметр типа TMessage.

Далее приводится код модуля формы Form1, которую можно перемещать мышью, поместив указатель мыши как в область заголовка, так и в клиентскую область.

Имена MoveForm и Msg процедуры и ее параметра могут быть изменены.

Свойство Menu

Отображаемое формой меню задается свойством Menu типа TMainMenu. При разработке приложения размещение компонента MainMenu главного меню в форме вызывает автоматическое присвоение значения MainMenu1 свойству Menu. Это самый простой способ ссылки на главное меню. Если в ходе выполнения приложения какая-либо форма должна отображать различные меню, то через свойство Menu можно указать другое главное меню, например, следующим образом: Form1.Menu := MainMenu2;

Свойство Icon

Каждая форма отображает в левой стороне области заголовка свой значок, определяемый свойством Icon типа Ticon. Если форма не является главной в приложении, то этот значок отображается при свертывании формы. Для любой формы свойство Icon можно задать с помощью Инспектора объектов или динамически (при выполнении приложения). Если значок не задан, то форма использует значок, указанный в свойстве Icon объекта Application. Последний выводится также при свертывании и отображении в панели задач Windows значка главной формы приложения.

В вышеуказанной процедуре значок динамически загружается из файла Picture1.ico при создании формы Form1.

Свойство Position

Размещение и размер формы при отображении определяет свойство Position типа TPosition. Оно может принимать значения, перечисленные далее:

  • poDesigned (форма отображается в той позиции и с теми размерами, которые были установлены при ее конструировании) — значение по умолчанию. Положение и размеры формы определяются свойствами Left, Tор, Width и Height. Если приложение запускается на мониторе с более низким разрешением, чем у того, на котором оно разрабатывалось, часть формы может выйти за пределы экрана;
  • poScreenCenter (форма выводится в центре экрана, ее высота и ширина— свойства Height и width— не изменяются);
  • poDefault (Windows автоматически определяет начальную позицию и размеры формы) — при этом значении программист не имеет возможности управлять этими параметрами, поэтому оно не допускается для форм многодокументных приложений;
  • poDefaultPosOnly (Windows определяет начальную позицию формы, ее размеры не изменяются);
  • poDefaultSizeOnly (Windows определяет начальные ширину и высоту формы и помещает форму в позицию, определенную при разработке);
  • PoDesktopCenter (форма выводится в центре экрана, ее высота и ширина не изменяются);
  • PoMainFormCenter (форма выводится в центре главной формы приложения, ее высота и ширина не изменяются) — это значение используется для вторичных форм, при применении его для главной формы оно действует как значение poScreenCenter;
  • PoOwnerFormCenter (форма выводится в центре формы, которая является ее владельцем, высота и ширина формы не изменяются) — если для формы не указан владелец (свойство Owner), то данное значение аналогично значению poMainFormCenter.

Приложение может запоминать расположение и размеры форм и при последующем выполнении правильно отображать формы на экране. Для этого программист должен записать соответствующие данные в инициализационный файл приложения или в системный реестр Windows, а при последующем выполнении приложения считать эти данные и установить их для форм.

Свойство Active

Свойство Active типа Boolean позволяет определить активность формы. В любой момент времени активной может быть только одна форма, при этом ее заголовок выделяется особым цветом (обычно синим). Если свойство Active имеет значение True, то форма активна (находится в фокусе ввода), если False — то неактивна. Это свойство доступно для чтения во время выполнения программы. Если требуется активизировать форму программно, следует использовать свойство WindowState или метод Show (showModal).

Cвойство ChildActiveForm

В многодокументном приложении родительское окно не может быть активным независимо от цвета заголовка. Для определения активного дочернего окна многодокументного приложения служит свойство ChildActiveForm типа TForm родительской формы.

В вышеуказанном примере процедура CheckFormActive модуля главной формы выполняет проверку активности для двух форм приложения и отображает соответствующую информацию в заголовках форм.

Свойство WindowState

Свойство WindowState типа TWindowstate определяет состояние отображения формы и может принимать одно из трех значений:

  • wsNormal (обычное состояние) — по умолчанию;
  • wsMinimized (свернута);
  • wsMaximized (развернута).

Кнопки btnMiniForm и btnNormalForm в форме Form1 сворачивают и восстанавливают обычное состояние формы Form2 соответственно.

Форма, для которой изменяется состояние отображения на экране, предварительно должна быть создана методами CreateForm или Create. Если форма не создана, то при обращении к ней будет сгенерировано исключение, несмотря на то, что переменная формы объявлена в модуле. Если форма создана, но не отображается на экране, то изменения ее состояния (свойства windowstate) происходят, однако пользователь не видит этого до тех пор, пока форма не будет отображена на экране.

Свойство ActiveControl

Будучи контейнером, форма содержит другие элементы управления. Оконные элементы управления (потомки класса TWinControl) могут получать фокус ввода. Свойство ActiveControl типа TWinControl определяет, какой элемент формы находится в фокусе. Для выбора элемента, находящегося в фокусе ввода (активного элемента), можно устанавливать это свойство в нужное значение при выполнении программы:

Эту же операцию выполняет метод SetFocus, который устанавливает фокус ввода для оконного элемента управления:

Свойство AutoScroll

В случае, когда размеры окна недостаточны для отображения всех содержащихся в форме интерфейсных компонентов, у формы могут появляться полосы прокрутки. Свойство AutoScroll типа Boolean определяет, появляются ли они автоматически, Если свойство AutoScroll имеет значение True (по умолчанию), то полосы прокрутки появляются и исчезают автоматически, без каких-либо действий программиста. Необходимость в полосах прокрутки может возникнуть, например, в случае, если пользователь уменьшит размеры формы так, что не все элементы управления будут полностью видны. Если же свойство AutoScroll установлено в значение False, то программист реализует управление просмотром информации вручную через свойства HorzScrollBar (горизонтальная прокрутка) и VertScrollBar (вертикальная прокрутка) типа TControlScrollBar формы.

Метод ScrollInView

Для программного управления полосами прокрутки можно использовать метод ScrollInView. Процедура ScrollInView (AControl: TControl) автоматически изменяет позиции полос прокрутки так, чтобы заданный параметром AControl элемент управления стал виден в отображаемой области.

Свойство KeyPreview

Свойство KeyPreview типа Boolean определяет, будет ли форма обрабатывать события клавиатуры, прежде чем их обработают элементы управления формы. Если свойство имеет значение False (по умолчанию), то клавиатурные события поступают к активному элементу управления (имеющему фокус ввода). При установке свойства KeyPreview в значение True форма первой получает сообщения о нажатии клавиш и может на них реагировать, что обычно используется для обработки комбинаций клавиш, независимо от активности элементов управления формы.

В вышеуказанной процедуре форма Form1 обрабатывает нажатие алфавитно-цифровых клавиш, отображая введенный символ в диалоговом окне Information.

Форма не может обрабатывать нажатие клавиши в связи с ее особым назначением.

Cвойство MDichildCount и метод Cascade

У формы имеется ряд свойств и методов, например свойство MDichildCount и метод Cascade, предназначенных для организации многодокументных приложений.

Илон Маск рекомендует:  perspective в CSS
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL