HierarchicalDataBoundControlDesigner Класс

Определение

Предоставляет поддержку во время разработки в узле конструктора для элемента управления HierarchicalDataBoundControl.

public class HierarchicalDataBoundControlDesigner : System.Web.UI.Design.WebControls.BaseDataBoundControlDesigner
Наследование
Производный

Примеры

В следующем примере кода показано, как расширить HierarchicalDataBoundControlDesigner класс, чтобы изменить внешний вид элементов управления, производных от HierarchicalDataBoundControl элемента управления во время разработки.

В примере класс является производным MyHierarchicalDataBoundControl от HierarchicalDataBoundControl. Класс MyHierarchicalDataBoundControl является просто копией HierarchicalDataBoundControl. В этом примере класс также является производным MyHierarchicalDataBoundControlDesignerHierarchicalDataBoundControlDesigner от класса и помещает DesignerAttribute объект для в MyHierarchicalDataBoundControlDesignerMyHierarchicalDataBoundControl класс .

Переопределяет MyHierarchicalDataBoundControlDesigner метод , PreFilterProperties чтобы сделать NamingContainer свойство видимым в сетке Свойства во время разработки. Он переопределяет GetDesignTimeHtml метод для создания разметки для заполнителя, если разметка времени разработки имеет значение null или Empty, или если разметка времени разработки является пустым <span> блоком (т. е. если между <span тегами ...> и </span> нет внутренней разметки).

using System;
using System.IO;
using System.Web;
using System.Drawing;
using System.Web.UI.WebControls;
using System.Web.UI.Design.WebControls;
using System.Collections;
using System.ComponentModel;
using System.Security.Permissions;

namespace Examples.CS.WebControls.Design
{
    // The MyHierarchicalDataBoundControl is a copy of the 
    // HierarchicalDataBoundControl.
    [AspNetHostingPermission(SecurityAction.Demand, 
        Level = AspNetHostingPermissionLevel.Minimal)]
    [AspNetHostingPermission(SecurityAction.InheritanceDemand, 
        Level = AspNetHostingPermissionLevel.Minimal)]
    [Designer(typeof(Examples.CS.WebControls.Design.
        MyHierarchicalDataBoundControlDesigner))]
    public class MyHierarchicalDataBoundControl : 
        HierarchicalDataBoundControl
    {
    } // MyHierarchicalDataBoundControl

    // Override members of the ierarchicalDataBoundControlDesigner.
    [ReflectionPermission(SecurityAction.Demand, Flags=ReflectionPermissionFlag.MemberAccess)]
    public class MyHierarchicalDataBoundControlDesigner : 
        HierarchicalDataBoundControlDesigner
    {
        const string bracketClose = ">";
        const string spanOpen = "<SPAN";
        const string spanClose = "</SPAN>";

        // Return the markup for a placeholder, if the inner markup is empty.
        // For brevity, the code that is used to detect embedded white_space 
        // in the tags is not shown.
        public override string GetDesignTimeHtml()
        {
            // Get the design-time markup from the base method.
            string markup = base.GetDesignTimeHtml();

            // If the markup is null or empty, return the markup 
            // for the placeholder.
            if(string.IsNullOrEmpty(markup))
                return GetEmptyDesignTimeHtml();

            // Make the markup uniform case so that the IndexOf will work.
            string MARKUP = markup.ToUpper();
            int charX;

            // Look for a <span ...> tag.
            if ((charX = MARKUP.IndexOf(spanOpen)) >= 0)
            {
                // Find closing bracket of span open tag.
                if ((charX = MARKUP.IndexOf(bracketClose, 
                        charX+spanOpen.Length)) >= 0)
                {
                    // If the inner markup of <span ...></span> is empty, 
                    // return the markup for a placeholder.
                    if (string.Compare(MARKUP, charX + 1, spanClose, 0, 
                                        spanClose.Length) == 0)

                        return GetEmptyDesignTimeHtml();
                }
            }
            // Return the original markup, if the inner markup is not empty.
            return markup;
        }

        // Shadow the control properties with design-time properties.
        protected override void PreFilterProperties(IDictionary properties)
        {
            string namingContainer = "NamingContainer";

            // Call the base method first.
            base.PreFilterProperties(properties);

            // Make the NamingContainery visible in the Properties grid.
            PropertyDescriptor selectProp =
                (PropertyDescriptor)properties[namingContainer];
            properties[namingContainer] =
                TypeDescriptor.CreateProperty(selectProp.ComponentType,
                    selectProp, BrowsableAttribute.Yes);
        } // PreFilterProperties
    } // MyHierarchicalDataBoundControlDesigner
} // Examples.CS.WebControls.Design

Комментарии

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

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

  • Свойство ActionLists возвращает DesignerActionListCollection объект , который обычно содержит объект, производный от DesignerActionList класса для каждого уровня в дереве наследования конструктора.

  • Свойство DataSourceDesigner предоставляет доступ к конструктору источника данных, если он определен.

  • Свойство DesignerView получает представление по умолчанию для источника данных, привязанного к связанному элементу управления.

  • Свойство UseDataSourcePickerActionList определяет, должен ли элемент управления отображать списки действий по умолчанию для выбора и создания источников данных.

Методы HierarchicalDataBoundControlDesigner класса предоставляют следующие функциональные возможности:

  • Метод ConnectToDataSource выполняет действия, необходимые для подключения к текущему источнику данных.

  • Метод CreateDataSource создает новый источник данных для связанного элемента управления.

  • Метод DataBind привязывает связанный элемент управления, производный HierarchicalDataBoundControl от класса , к источнику данных времени разработки.

  • Метод DisconnectFromDataSource выполняет действия, необходимые для отключения от текущего источника данных.

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

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

  • Метод PreFilterProperties используется для удаления свойств из или добавления дополнительных свойств в свойства связанного элемента управления, производного от HierarchicalDataBoundControl класса , или для теневых свойств.

Конструкторы

HierarchicalDataBoundControlDesigner()

Инициализирует новый экземпляр класса HierarchicalDataBoundControlDesigner.

Свойства

ActionLists

Получает коллекцию списков действий данного конструктора.

AllowResize

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

(Унаследовано от ControlDesigner)
AssociatedComponents

Получает коллекцию компонентов, сопоставленных компоненту, который управляется конструктором.

(Унаследовано от ComponentDesigner)
AutoFormats

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

(Унаследовано от ControlDesigner)
Behavior
Устаревшие..

Получает или задает поведение DHTML, связанное с конструктором.

(Унаследовано от HtmlControlDesigner)
Component

Возвращает основной компонент, создаваемый данным конструктором.

(Унаследовано от ComponentDesigner)
DataBindings

Получает коллекцию привязок данных для текущего элемента управления.

(Унаследовано от HtmlControlDesigner)
DataBindingsEnabled

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

(Унаследовано от ControlDesigner)
DataSource

Получает или задает значение свойства DataSource для сопоставленного элемента управления.

(Унаследовано от BaseDataBoundControlDesigner)
DataSourceDesigner

Предоставляет доступ к конструктору источника данных, если таковой выбран для привязки данных.

DataSourceID

Получает или задает значение свойства DataSourceID базового объекта BaseDataBoundControl.

(Унаследовано от BaseDataBoundControlDesigner)
DesignerState

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

(Унаследовано от ControlDesigner)
DesignerView

Получает представление по умолчанию для источника данных, который привязан к сопоставленному элементу управления.

DesignTimeElement
Устаревшие..

Возвращает объект времени разработки, представляющий элемент управления, сопоставленный с объектом HtmlControlDesigner в области разработки.

(Унаследовано от HtmlControlDesigner)
DesignTimeElementView
Устаревшие..

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

(Унаследовано от ControlDesigner)
DesignTimeHtmlRequiresLoadComplete
Устаревшие..

Получает значение, указывающее, должна ли быть завершена загрузка основным приложением разработки до вызова метода GetDesignTimeHtml.

(Унаследовано от ControlDesigner)
Expressions

Возвращает привязки выражений для текущего элемента управления во время разработки.

(Унаследовано от HtmlControlDesigner)
HidePropertiesInTemplateMode

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

(Унаследовано от ControlDesigner)
ID

Получает или задает строку идентификатора элемента управления.

(Унаследовано от ControlDesigner)
InheritanceAttribute

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

(Унаследовано от ComponentDesigner)
Inherited

Возвращает значение, определяющее, наследуется ли этот компонент или нет.

(Унаследовано от ComponentDesigner)
InTemplateMode

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

(Унаследовано от ControlDesigner)
IsDirty
Устаревшие..

Получает или задает значение, указывающее наличие отметки об изменении серверного веб-элемента управления.

(Унаследовано от ControlDesigner)
ParentComponent

Возвращает родительский компонент этого конструктора.

(Унаследовано от ComponentDesigner)
ReadOnly
Устаревшие..

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

(Унаследовано от ControlDesigner)
RootDesigner

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

(Унаследовано от ControlDesigner)
SetTextualDefaultProperty

Предоставляет поддержку во время разработки в узле конструктора для элемента управления HierarchicalDataBoundControl.

(Унаследовано от ComponentDesigner)
ShadowProperties

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

(Унаследовано от ComponentDesigner)
ShouldCodeSerialize
Устаревшие..

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

(Унаследовано от HtmlControlDesigner)
Tag

Получает объект, представляющей элемент разметки HTML для сопоставленного элемента управления.

(Унаследовано от ControlDesigner)
TemplateGroups

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

(Унаследовано от ControlDesigner)
UseDataSourcePickerActionList

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

UsePreviewControl

Получает значение, указывающее, использует ли конструктор элементов управления временный элемент управления "Предварительный просмотр" для создания разметки HTML во время разработки.

(Унаследовано от ControlDesigner)
Verbs

Возвращает команды в режиме конструктора, поддерживаемые компонентом, связанным с конструктором.

(Унаследовано от ComponentDesigner)
ViewControl

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

(Унаследовано от ControlDesigner)
ViewControlCreated

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

(Унаследовано от ControlDesigner)
Visible

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

(Унаследовано от ControlDesigner)

Методы

ConnectToDataSource()

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

CreateDataSource()

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

CreateErrorDesignTimeHtml(String)

Создает разметку HTML для отображения указанного сообщения об ошибке во время разработки.

(Унаследовано от ControlDesigner)
CreateErrorDesignTimeHtml(String, Exception)

Создает разметку HTML для отображения во время разработки указанного сообщения об ошибке, вызванной исключением.

(Унаследовано от ControlDesigner)
CreatePlaceHolderDesignTimeHtml()

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

(Унаследовано от ControlDesigner)
CreatePlaceHolderDesignTimeHtml(String)

Предоставляет простое прямоугольное представление местозаполнителя, в котором выводится тип и идентификатор элемента управления, а также дополнительно указанные инструкции или сведения.

(Унаследовано от ControlDesigner)
CreateViewControl()

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

(Унаследовано от ControlDesigner)
DataBind(BaseDataBoundControl)

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

DisconnectFromDataSource()

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

Dispose()

Освобождает все ресурсы, занятые модулем ComponentDesigner.

(Унаследовано от ComponentDesigner)
Dispose(Boolean)

Освобождает неуправляемые (а при необходимости и управляемые) ресурсы, используемые объектом BaseDataBoundControlDesigner.

(Унаследовано от BaseDataBoundControlDesigner)
DoDefaultAction()

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

(Унаследовано от ComponentDesigner)
Equals(Object)

Определяет, равен ли указанный объект текущему объекту.

(Унаследовано от Object)
GetBounds()

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

(Унаследовано от ControlDesigner)
GetDesignTimeDataSource()

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

GetDesignTimeHtml()

Создает разметку, используемую для обработки соответствующего элемента управления во время разработки.

(Унаследовано от BaseDataBoundControlDesigner)
GetDesignTimeHtml(DesignerRegionCollection)

Получает разметку HTML для отображения элемента управления и заполняет коллекцию текущими областями конструктора элемента управления.

(Унаследовано от ControlDesigner)
GetEditableDesignerRegionContent(EditableDesignerRegion)

Возвращает содержимое редактируемой области представления времени разработки связанного элемента управления.

(Унаследовано от ControlDesigner)
GetEmptyDesignTimeHtml()

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

(Унаследовано от BaseDataBoundControlDesigner)
GetErrorDesignTimeHtml(Exception)

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

(Унаследовано от BaseDataBoundControlDesigner)
GetHashCode()

Служит хэш-функцией по умолчанию.

(Унаследовано от Object)
GetPersistenceContent()

Получает сохраненную внутреннюю разметку HTML элемента управления во время разработки.

(Унаследовано от ControlDesigner)
GetPersistInnerHtml()
Устаревшие..

Получает сохраненную внутреннюю разметку HTML элемента управления.

(Унаследовано от ControlDesigner)
GetSampleDataSource()

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

GetService(Type)

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

(Унаследовано от ComponentDesigner)
GetType()

Возвращает объект Type для текущего экземпляра.

(Унаследовано от Object)
GetViewRendering()

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

(Унаследовано от ControlDesigner)
Initialize(IComponent)

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

(Унаследовано от BaseDataBoundControlDesigner)
InitializeExistingComponent(IDictionary)

Выполняет повторную инициализацию существующего компонента.

(Унаследовано от ComponentDesigner)
InitializeNewComponent(IDictionary)

Инициализирует только что созданный компонент.

(Унаследовано от ComponentDesigner)
InitializeNonDefault()
Устаревшие..
Устаревшие..

Инициализирует параметры импортированного компонента, параметры которого уже были инициализированы с использованием параметров, отличных от заданных по умолчанию.

(Унаследовано от ComponentDesigner)
Invalidate()

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

(Унаследовано от ControlDesigner)
Invalidate(Rectangle)

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

(Унаследовано от ControlDesigner)
InvokeGetInheritanceAttribute(ComponentDesigner)

Возвращает атрибут InheritanceAttribute заданного объекта ComponentDesigner.

(Унаследовано от ComponentDesigner)
IsPropertyBound(String)
Устаревшие..

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

(Унаследовано от ControlDesigner)
Localize(IDesignTimeResourceWriter)

Использует предоставленный модуль записи ресурсов для сохранения локализуемых свойств сопоставленного элемента управления в ресурсе основного приложения разработки.

(Унаследовано от ControlDesigner)
MemberwiseClone()

Создает неполную копию текущего объекта Object.

(Унаследовано от Object)
OnAutoFormatApplied(DesignerAutoFormat)

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

(Унаследовано от ControlDesigner)
OnBehaviorAttached()

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

(Унаследовано от ControlDesigner)
OnBehaviorDetaching()
Устаревшие..

Вызывается при разрыве связи поведения и элемента.

(Унаследовано от HtmlControlDesigner)
OnBindingsCollectionChanged(String)
Устаревшие..

Вызывается при изменении коллекции привязки данных.

(Унаследовано от ControlDesigner)
OnClick(DesignerRegionMouseEventArgs)

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

(Унаследовано от ControlDesigner)
OnComponentChanged(Object, ComponentChangedEventArgs)

Вызывается при изменении сопоставленного элемента управления.

(Унаследовано от ControlDesigner)
OnComponentChanging(Object, ComponentChangingEventArgs)

Предоставляет метод, обрабатывающий событие ComponentChanging для сопоставленного элемента управления.

(Унаследовано от ControlDesigner)
OnControlResize()
Устаревшие..

Вызывается, когда изменяется размер сопоставленного серверного веб-элемента управления в основном приложении разработки во время разработки.

(Унаследовано от ControlDesigner)
OnDataSourceChanged(Boolean)

Вызывается при изменении источника данных сопоставленного объекта BaseDataBoundControl.

(Унаследовано от BaseDataBoundControlDesigner)
OnPaint(PaintEventArgs)

Вызывается, когда конструктор элементов управления прорисовывает сопоставленный элемент управления в рабочей области конструирования, если значением поля CustomPaint является true.

(Унаследовано от ControlDesigner)
OnSchemaRefreshed()

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

(Унаследовано от BaseDataBoundControlDesigner)
OnSetComponentDefaults()
Устаревшие..
Устаревшие..

Задает для компонента свойства по умолчанию.

(Унаследовано от ComponentDesigner)
OnSetParent()

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

(Унаследовано от HtmlControlDesigner)
PostFilterAttributes(IDictionary)

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

(Унаследовано от ComponentDesigner)
PostFilterEvents(IDictionary)

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

(Унаследовано от ComponentDesigner)
PostFilterProperties(IDictionary)

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

(Унаследовано от ComponentDesigner)
PreFilterAttributes(IDictionary)

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

(Унаследовано от ComponentDesigner)
PreFilterEvents(IDictionary)

Определяет список событий, предоставляемых во время разработки для объекта TypeDescriptor компонента.

(Унаследовано от HtmlControlDesigner)
PreFilterProperties(IDictionary)

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

RaiseComponentChanged(MemberDescriptor, Object, Object)

Уведомляет службу IComponentChangeService о том, что данный компонент был изменен.

(Унаследовано от ComponentDesigner)
RaiseComponentChanging(MemberDescriptor)

Уведомляет службу IComponentChangeService о том, что компонент будет изменен.

(Унаследовано от ComponentDesigner)
RaiseResizeEvent()
Устаревшие..

Вызывает событие OnControlResize().

(Унаследовано от ControlDesigner)
RegisterClone(Object, Object)

Регистрирует внутренние данные в клонированном элементе управления.

(Унаследовано от ControlDesigner)
SetEditableDesignerRegionContent(EditableDesignerRegion, String)

Указывает содержимое редактируемой области элемента управления во время разработки.

(Унаследовано от ControlDesigner)
SetRegionContent(EditableDesignerRegion, String)

Указывает содержимое редактируемой области в представлении времени разработки элемента управления.

(Унаследовано от ControlDesigner)
SetViewFlags(ViewFlags, Boolean)

Назначает указанное битовое перечисление ViewFlags указанному значению флага.

(Унаследовано от ControlDesigner)
ToString()

Возвращает строку, представляющую текущий объект.

(Унаследовано от Object)
UpdateDesignTimeHtml()

Обновляет разметку HTML времени разработки для сопоставленного серверного веб-элемента управления посредством вызова метода GetDesignTimeHtml.

(Унаследовано от ControlDesigner)

Явные реализации интерфейса

IDesignerFilter.PostFilterAttributes(IDictionary)

Описание этого элемента содержится в методе PostFilterAttributes(IDictionary).

(Унаследовано от ComponentDesigner)
IDesignerFilter.PostFilterEvents(IDictionary)

Описание этого элемента содержится в методе PostFilterEvents(IDictionary).

(Унаследовано от ComponentDesigner)
IDesignerFilter.PostFilterProperties(IDictionary)

Описание этого элемента содержится в методе PostFilterProperties(IDictionary).

(Унаследовано от ComponentDesigner)
IDesignerFilter.PreFilterAttributes(IDictionary)

Описание этого элемента содержится в методе PreFilterAttributes(IDictionary).

(Унаследовано от ComponentDesigner)
IDesignerFilter.PreFilterEvents(IDictionary)

Описание этого элемента содержится в методе PreFilterEvents(IDictionary).

(Унаследовано от ComponentDesigner)
IDesignerFilter.PreFilterProperties(IDictionary)

Описание этого элемента содержится в методе PreFilterProperties(IDictionary).

(Унаследовано от ComponentDesigner)
ITreeDesigner.Children

Описание этого элемента см. в свойстве Children.

(Унаследовано от ComponentDesigner)
ITreeDesigner.Parent

Описание этого элемента см. в свойстве Parent.

(Унаследовано от ComponentDesigner)

Применяется к

Өнім Нұсқалар
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1

См. также раздел