Цель работы: освоить методы работы с сенсорным экраном
Устройства, работающие под управлением Windows Phone не оснащают аппаратной клавиатурой. Такая тенденция наблюдается сейчас повсеместно, поэтому особую важность во взаимодействии с пользователем приобретает экранная клавиатура устройства. Такая клавиатура вызывается автоматически, когда пользователь входит в режим редактирования полей, предусматривающих текстовый ввод. Кроме того, сейчас разработчик для платформы Windows Phone не может создавать собственные варианты клавиатуры, однако, это ограничение компенсируется большим набором вариантов встроенной в систему экранной клавиатуры.
Для того, чтобы задать тип клавиатуры, которая отображается при попытке пользователя редактировать содержимое элемента управления, поддерживающего ввод текста, нужно настроить свойство этого элемента ). Существует много вариантов такой клавиатуры. При заполнении этого свойства, например, для текстового поля, можно воспользоваться либо окном свойств, где представлен список доступных вариантов, либо, при заполнении его в XAML-коде – подсказкой IntelliSense. Можно отметить некоторые варианты встроенной клавиатуры, которые используются чаще других. Эти варианты проиллюстрированы в проекте P15_1 на странице Keyboard.xaml, рис. 45.1., Листинг 45.1.
(рис 45.1) Настройка типа клавиатуры, отображаемой при касании текстового поля
<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
<TextBox HorizontalAlignment="Left" Height="72" Margin="0,10,0,0"
TextWrapping="Wrap" Text="Обычная клавиатура"
VerticalAlignment="Top" Width="456"/>
<TextBox HorizontalAlignment="Left" Height="72" Margin="0,87,0,0"
TextWrapping="Wrap" Text="Цифровая клавиатура"
VerticalAlignment="Top" Width="456" InputScope="Number"/>
<TextBox HorizontalAlignment="Left" Height="72" Margin="0,164,0,0"
TextWrapping="Wrap" Text="Клавиатура для чата"
VerticalAlignment="Top" Width="456" InputScope="Chat"/>
<TextBox HorizontalAlignment="Left" Height="72" Margin="0,241,0,0"
TextWrapping="Wrap" Text="Клавиатура для телефона"
VerticalAlignment="Top" Width="456" InputScope="TelephoneNumber"/>
<TextBox HorizontalAlignment="Left" Height="72" Margin="0,318,0,0"
TextWrapping="Wrap" Text="Клавиатура для URL"
VerticalAlignment="Top" Width="456" InputScope="Url"/>
<TextBox HorizontalAlignment="Left" Height="72" Margin="0,395,0,0"
TextWrapping="Wrap" Text="Клавиатура для формул"
VerticalAlignment="Top" Width="456" InputScope="Formula"/>
<TextBox HorizontalAlignment="Left" Height="72" Margin="0,472,0,0"
TextWrapping="Wrap" Text="Клавиатура для ввода текста"
VerticalAlignment="Top" Width="456" InputScope="Text"/>
</Grid>
Без настройки свойства InputScope для поля выводится стандартная клавиатура. При установке этого поля клавиатура настраивается для оптимизации ввода тех данных, для работы с которым предназначено это поле. В частности, в примере использованы следующие значения InputScope:
На рис. 45.2. вы можете видеть клавиатуру для поля с InputScope, установленным в значение Formula.
(рис 45.2) Клавиатура для ввода формул
Дополнительные сведения об использовании экранной клавиатуры вы можете найти в материалах "How to change the on-screen keyboard input scope in Windows Phone" ("Как изменить область ввода экранной клавиатуры в Windows Phone", http://msdn.microsoft.com/en-us/library/windowsphone/develop/gg521152%28v=vs.105%29.aspx и "On-screen keyboard input scope index for Windows Phone" ("Перечень областей ввода экранной клавиатуры в Windows Phone", http://msdn.microsoft.com/en-us/library/windowsphone/develop/hh393998%28v=vs.105%29.aspx.
Элементы управления, которыми мы пользовались до сих пор, позволяют обрабатывать стандартные варианты взаимодействия с ними с использованием обработчиков событий. Например, обработав событие Click кнопки можно задать реакцию системы на касание кнопки. Среди стандартных событий элементов управления можно обнаружить и другие события для обработки сенсорного ввода. Например, DoubleTap – для двойного касания, Hold – для удержания.
Состав событий, связанных с сенсорным экраном для конкретного элемента управления отражает специфику его использования. В то же время, среди этих событий нет, например, таких, как события, служащие для обработки сложных жестов. Например – жеста Flick, когда пользователь касается экрана, быстро проводит пальцем и, не останавливая движения, отрывает палец от экрана. Например – популярных жестов сжатия/растяжения (Pinch/Zoom) для масштабирования объектов.
Поддержку жестов можно реализовать самостоятельно, если обработать события ManipulationStarted (происходит при начале манипуляции), ManipulationDelta (происходит в процессе манипуляции, повторяется), и ManipulationCompleted (Происходит при завершении манипуляции). В проекте P15_1 использование манипуляций для перемещения окружности с градиентной заливкой по экрану показано на странице EventsAndGestures.xaml.
Кроме того, можно обработать низкоуровневые события, воспользовавшись классом TouchPoint.
Для того, чтобы упростить обработку жестов, можно воспользоваться библиотекой Windows Phone Toolkit – её можно подключить к проекту с помощью менеджера пакетов NuGet. Вот сайт проекта: http://phone.codeplex.com/. Найти библиотеку можно, введя в строку поиска запрос "wptoolkit". Эта библиотека, помимо набора элементов управления, предоставляет классы GestureService и GestureListener, предназначенные для обработки популярных жестов. В частности, поддерживаются следующие события:
Демонстрация обработки жестов Flick и Hold с помощью Windows Phone Toolkit сделана на примере прямоугольника на странице EventsAndGestures.xaml, рис. 45.3.
(рис 45.3) Объекты, воспринимающие жесты и манипуляции
Обратите внимание на то, как выглядит XAML-код страницы, на которой расположены элементы (Листинг 45.2). Здесь, во-первых, объявлено пространство имен toolkit. Во-вторых, для прямоугольника указаны обработчики событий Flick и Hold. По первому событию мы увеличиваем длину прямоугольника, по второму – сбрасываем прямоугольник в исходное состояние.
<phone:PhoneApplicationPage
x:Class="P15_1.EventsGestures"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
FontFamily="{StaticResource PhoneFontFamilyNormal}"
FontSize="{StaticResource PhoneFontSizeNormal}"
Foreground="{StaticResource PhoneForegroundBrush}"
SupportedOrientations="Portrait" Orientation="Portrait"
mc:Ignorable="d"
xmlns:toolkit="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone.Controls.Toolkit"
shell:SystemTray.IsVisible="True">
<!--LayoutRoot представляет корневую сетку, где размещается все содержимое страницы-->
<Grid x:Name="LayoutRoot" Background="Transparent">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<!--TitlePanel содержит имя приложения и заголовок страницы-->
<StackPanel Grid.Row="0" Margin="12,17,0,28">
<TextBlock Text="СЕНСОРНЫЙ ВВОД" Style="{StaticResource PhoneTextNormalStyle}"/>
<TextBlock Text="жесты" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/>
</StackPanel>
<!--ContentPanel – поместите здесь дополнительное содержимое-->
<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
<Rectangle
Fill="{StaticResource PhoneAccentBrush}"
HorizontalAlignment="Left"
Height="100"
Margin="147,109,0,0"
Stroke="Black"
VerticalAlignment="Top"
Width="100">
<toolkit:GestureService.GestureListener>
<toolkit:GestureListener
Flick="GestureListener_Flick"
Hold="GestureListener_Hold">
</toolkit:GestureListener>
</toolkit:GestureService.GestureListener>
</Rectangle>
<TextBlock HorizontalAlignment="Left" Margin="24,25,0,0" TextWrapping="Wrap"
Text="Жест скольжения для увеличеия размера,
жест удержания - для возврата" VerticalAlignment="Top"/>
<Ellipse x:Name="ellipseToDrag" HorizontalAlignment="Left"
Height="100" Margin="147,399,0,0" Stroke="Black"
VerticalAlignment="Top" Width="100"
ManipulationDelta="Ellipse_ManipulationDelta">
<Ellipse.Fill>
<RadialGradientBrush>
<GradientStop Color="#FFE51400" Offset="1"/>
<GradientStop Color="#FFF5F3F3"/>
</RadialGradientBrush>
</Ellipse.Fill>
</Ellipse>
<TextBlock HorizontalAlignment="Left" Margin="24,299,0,0" TextWrapping="Wrap"
Text="Эту фигуру можно перемещать" VerticalAlignment="Top"/>
</Grid>
</Grid>
</phone:PhoneApplicationPage>
В Листинге 45.3 приведен код файла EventsGestures.xaml.cs. Необходимые пояснения к коду приведены в комментариях
using Microsoft.Phone.Controls;
using System.Windows.Shapes;
using System.Windows.Media;
namespace P15_1
{
public partial class EventsGestures : PhoneApplicationPage
{
//Трансформация для перемещения объекта
private TranslateTransform dragTranslation;
public EventsGestures()
{
InitializeComponent();
//Инициализируем трансформацию
dragTranslation = new TranslateTransform();
//Назначаем её объекту
ellipseToDrag.RenderTransform = this.dragTranslation;
}
//Обработчик события Hold
private void GestureListener_Hold(object sender, GestureEventArgs e)
{
//Получим объект-отправитель событий
Rectangle R = sender as Rectangle;
//Сбросим ширину до 100 пикселей
R.Width = 100;
}
private void GestureListener_Flick(object sender, FlickGestureEventArgs e)
{
//Получим объект-отправитель событий
Rectangle R = sender as Rectangle;
//Увеличим на 10 пикселей ширину
R.Width+=10;
}
//Обработчик соыбытия ManipulationDelta
private void Ellipse_ManipulationDelta(object sender, System.Windows.Input.ManipulationDeltaEventArgs e)
{
//Переместим объект в соответствии с координатами точки касания
dragTranslation.X += e.DeltaManipulation.Translation.X;
dragTranslation.Y += e.DeltaManipulation.Translation.Y;
}
}
}
В этой лабораторной работе мы рассмотрели способы настройки экранной клавиатуры с помощью установки свойства InputScope текстового блока. Использование экранной клавиатуры, наилучшим образом подходящей для ввода данных конкретного текстового поля, повышает удобство работы с программой. Так же мы рассмотрели методику обработки жестов. Жесты позволяют расширить возможности по сенсорному взаимодействию пользователя и приложения. Используя жесты нужно следить за тем, чтобы они распознавались однозначно (не следует назначать элементу управления жесты, отдельные части которых могут быть интерпретированы как другие жесты, назначенные тому же элементу управления).
Проанализируйте пользовательский интерфейс приложения, разработкой которого вы занимаетесь, обращая внимание на то, какие именно данные пользователь вводит в текстовые поля, присутствующие в интерфейсе. Подберите такие значения свойства InputScope полей ввода, которые позволят пользователю наиболее удобно и быстро вводить данные. Подумайте, как использование жесты позволит улучшить опыт взаимодействия пользователя и приложения. Подготовьте отчёт.
К данной лекции подготовлено видеоприложение и демонстрационный программный проект.
Цель работы: освоить методы работы с сенсорным экраном
Устройства, работающие под управлением Windows Phone не оснащают аппаратной клавиатурой. Такая тенденция наблюдается сейчас повсеместно, поэтому особую важность во взаимодействии с пользователем приобретает экранная клавиатура устройства. Такая клавиатура вызывается автоматически, когда пользователь входит в режим редактирования полей, предусматривающих текстовый ввод. Кроме того, сейчас разработчик для платформы Windows Phone не может создавать собственные варианты клавиатуры, однако, это ограничение компенсируется большим набором вариантов встроенной в систему экранной клавиатуры.
Для того, чтобы задать тип клавиатуры, которая отображается при попытке пользователя редактировать содержимое элемента управления, поддерживающего ввод текста, нужно настроить свойство этого элемента ). Существует много вариантов такой клавиатуры. При заполнении этого свойства, например, для текстового поля, можно воспользоваться либо окном свойств, где представлен список доступных вариантов, либо, при заполнении его в XAML-коде – подсказкой IntelliSense. Можно отметить некоторые варианты встроенной клавиатуры, которые используются чаще других. Эти варианты проиллюстрированы в проекте P15_1 на странице Keyboard.xaml, рис. 45.1., Листинг 45.1.
(рис 45.1) Настройка типа клавиатуры, отображаемой при касании текстового поля
<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
<TextBox HorizontalAlignment="Left" Height="72" Margin="0,10,0,0"
TextWrapping="Wrap" Text="Обычная клавиатура"
VerticalAlignment="Top" Width="456"/>
<TextBox HorizontalAlignment="Left" Height="72" Margin="0,87,0,0"
TextWrapping="Wrap" Text="Цифровая клавиатура"
VerticalAlignment="Top" Width="456" InputScope="Number"/>
<TextBox HorizontalAlignment="Left" Height="72" Margin="0,164,0,0"
TextWrapping="Wrap" Text="Клавиатура для чата"
VerticalAlignment="Top" Width="456" InputScope="Chat"/>
<TextBox HorizontalAlignment="Left" Height="72" Margin="0,241,0,0"
TextWrapping="Wrap" Text="Клавиатура для телефона"
VerticalAlignment="Top" Width="456" InputScope="TelephoneNumber"/>
<TextBox HorizontalAlignment="Left" Height="72" Margin="0,318,0,0"
TextWrapping="Wrap" Text="Клавиатура для URL"
VerticalAlignment="Top" Width="456" InputScope="Url"/>
<TextBox HorizontalAlignment="Left" Height="72" Margin="0,395,0,0"
TextWrapping="Wrap" Text="Клавиатура для формул"
VerticalAlignment="Top" Width="456" InputScope="Formula"/>
<TextBox HorizontalAlignment="Left" Height="72" Margin="0,472,0,0"
TextWrapping="Wrap" Text="Клавиатура для ввода текста"
VerticalAlignment="Top" Width="456" InputScope="Text"/>
</Grid>
Без настройки свойства InputScope для поля выводится стандартная клавиатура. При установке этого поля клавиатура настраивается для оптимизации ввода тех данных, для работы с которым предназначено это поле. В частности, в примере использованы следующие значения InputScope:
На рис. 45.2. вы можете видеть клавиатуру для поля с InputScope, установленным в значение Formula.
(рис 45.2) Клавиатура для ввода формул
Дополнительные сведения об использовании экранной клавиатуры вы можете найти в материалах "How to change the on-screen keyboard input scope in Windows Phone" ("Как изменить область ввода экранной клавиатуры в Windows Phone", http://msdn.microsoft.com/en-us/library/windowsphone/develop/gg521152%28v=vs.105%29.aspx и "On-screen keyboard input scope index for Windows Phone" ("Перечень областей ввода экранной клавиатуры в Windows Phone", http://msdn.microsoft.com/en-us/library/windowsphone/develop/hh393998%28v=vs.105%29.aspx.
Элементы управления, которыми мы пользовались до сих пор, позволяют обрабатывать стандартные варианты взаимодействия с ними с использованием обработчиков событий. Например, обработав событие Click кнопки можно задать реакцию системы на касание кнопки. Среди стандартных событий элементов управления можно обнаружить и другие события для обработки сенсорного ввода. Например, DoubleTap – для двойного касания, Hold – для удержания.
Состав событий, связанных с сенсорным экраном для конкретного элемента управления отражает специфику его использования. В то же время, среди этих событий нет, например, таких, как события, служащие для обработки сложных жестов. Например – жеста Flick, когда пользователь касается экрана, быстро проводит пальцем и, не останавливая движения, отрывает палец от экрана. Например – популярных жестов сжатия/растяжения (Pinch/Zoom) для масштабирования объектов.
Поддержку жестов можно реализовать самостоятельно, если обработать события ManipulationStarted (происходит при начале манипуляции), ManipulationDelta (происходит в процессе манипуляции, повторяется), и ManipulationCompleted (Происходит при завершении манипуляции). В проекте P15_1 использование манипуляций для перемещения окружности с градиентной заливкой по экрану показано на странице EventsAndGestures.xaml.
Кроме того, можно обработать низкоуровневые события, воспользовавшись классом TouchPoint.
Для того, чтобы упростить обработку жестов, можно воспользоваться библиотекой Windows Phone Toolkit – её можно подключить к проекту с помощью менеджера пакетов NuGet. Вот сайт проекта: http://phone.codeplex.com/. Найти библиотеку можно, введя в строку поиска запрос "wptoolkit". Эта библиотека, помимо набора элементов управления, предоставляет классы GestureService и GestureListener, предназначенные для обработки популярных жестов. В частности, поддерживаются следующие события:
Демонстрация обработки жестов Flick и Hold с помощью Windows Phone Toolkit сделана на примере прямоугольника на странице EventsAndGestures.xaml, рис. 45.3.
(рис 45.3) Объекты, воспринимающие жесты и манипуляции
Обратите внимание на то, как выглядит XAML-код страницы, на которой расположены элементы (Листинг 45.2). Здесь, во-первых, объявлено пространство имен toolkit. Во-вторых, для прямоугольника указаны обработчики событий Flick и Hold. По первому событию мы увеличиваем длину прямоугольника, по второму – сбрасываем прямоугольник в исходное состояние.
<phone:PhoneApplicationPage
x:Class="P15_1.EventsGestures"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
FontFamily="{StaticResource PhoneFontFamilyNormal}"
FontSize="{StaticResource PhoneFontSizeNormal}"
Foreground="{StaticResource PhoneForegroundBrush}"
SupportedOrientations="Portrait" Orientation="Portrait"
mc:Ignorable="d"
xmlns:toolkit="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone.Controls.Toolkit"
shell:SystemTray.IsVisible="True">
<!--LayoutRoot представляет корневую сетку, где размещается все содержимое страницы-->
<Grid x:Name="LayoutRoot" Background="Transparent">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<!--TitlePanel содержит имя приложения и заголовок страницы-->
<StackPanel Grid.Row="0" Margin="12,17,0,28">
<TextBlock Text="СЕНСОРНЫЙ ВВОД" Style="{StaticResource PhoneTextNormalStyle}"/>
<TextBlock Text="жесты" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/>
</StackPanel>
<!--ContentPanel – поместите здесь дополнительное содержимое-->
<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
<Rectangle
Fill="{StaticResource PhoneAccentBrush}"
HorizontalAlignment="Left"
Height="100"
Margin="147,109,0,0"
Stroke="Black"
VerticalAlignment="Top"
Width="100">
<toolkit:GestureService.GestureListener>
<toolkit:GestureListener
Flick="GestureListener_Flick"
Hold="GestureListener_Hold">
</toolkit:GestureListener>
</toolkit:GestureService.GestureListener>
</Rectangle>
<TextBlock HorizontalAlignment="Left" Margin="24,25,0,0" TextWrapping="Wrap"
Text="Жест скольжения для увеличеия размера,
жест удержания - для возврата" VerticalAlignment="Top"/>
<Ellipse x:Name="ellipseToDrag" HorizontalAlignment="Left"
Height="100" Margin="147,399,0,0" Stroke="Black"
VerticalAlignment="Top" Width="100"
ManipulationDelta="Ellipse_ManipulationDelta">
<Ellipse.Fill>
<RadialGradientBrush>
<GradientStop Color="#FFE51400" Offset="1"/>
<GradientStop Color="#FFF5F3F3"/>
</RadialGradientBrush>
</Ellipse.Fill>
</Ellipse>
<TextBlock HorizontalAlignment="Left" Margin="24,299,0,0" TextWrapping="Wrap"
Text="Эту фигуру можно перемещать" VerticalAlignment="Top"/>
</Grid>
</Grid>
</phone:PhoneApplicationPage>
В Листинге 45.3 приведен код файла EventsGestures.xaml.cs. Необходимые пояснения к коду приведены в комментариях
using Microsoft.Phone.Controls;
using System.Windows.Shapes;
using System.Windows.Media;
namespace P15_1
{
public partial class EventsGestures : PhoneApplicationPage
{
//Трансформация для перемещения объекта
private TranslateTransform dragTranslation;
public EventsGestures()
{
InitializeComponent();
//Инициализируем трансформацию
dragTranslation = new TranslateTransform();
//Назначаем её объекту
ellipseToDrag.RenderTransform = this.dragTranslation;
}
//Обработчик события Hold
private void GestureListener_Hold(object sender, GestureEventArgs e)
{
//Получим объект-отправитель событий
Rectangle R = sender as Rectangle;
//Сбросим ширину до 100 пикселей
R.Width = 100;
}
private void GestureListener_Flick(object sender, FlickGestureEventArgs e)
{
//Получим объект-отправитель событий
Rectangle R = sender as Rectangle;
//Увеличим на 10 пикселей ширину
R.Width+=10;
}
//Обработчик соыбытия ManipulationDelta
private void Ellipse_ManipulationDelta(object sender, System.Windows.Input.ManipulationDeltaEventArgs e)
{
//Переместим объект в соответствии с координатами точки касания
dragTranslation.X += e.DeltaManipulation.Translation.X;
dragTranslation.Y += e.DeltaManipulation.Translation.Y;
}
}
}
В этой лабораторной работе мы рассмотрели способы настройки экранной клавиатуры с помощью установки свойства InputScope текстового блока. Использование экранной клавиатуры, наилучшим образом подходящей для ввода данных конкретного текстового поля, повышает удобство работы с программой. Так же мы рассмотрели методику обработки жестов. Жесты позволяют расширить возможности по сенсорному взаимодействию пользователя и приложения. Используя жесты нужно следить за тем, чтобы они распознавались однозначно (не следует назначать элементу управления жесты, отдельные части которых могут быть интерпретированы как другие жесты, назначенные тому же элементу управления).
Проанализируйте пользовательский интерфейс приложения, разработкой которого вы занимаетесь, обращая внимание на то, какие именно данные пользователь вводит в текстовые поля, присутствующие в интерфейсе. Подберите такие значения свойства InputScope полей ввода, которые позволят пользователю наиболее удобно и быстро вводить данные. Подумайте, как использование жесты позволит улучшить опыт взаимодействия пользователя и приложения. Подготовьте отчёт.
К данной лекции подготовлено видеоприложение и демонстрационный программный проект.
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.