КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Елементи керування у формах, їхні властивості, методи, події
Форма UserForm надає користувачу можливість створювати діалогові вікна для інформаційних систем користувача. Вона служить базою вікна користувача, на якій у залежності від розв'язуваної задачі розміщають необхідні елементи керування. VBA має умонтований набір елементів керування, що подані на відповідній панелі.
Мал. 4. Панель елементів керування.
Використовуючи цей набір і редактор форм не важко створити будь-який інтерфейс користувача. Більшість елементів керування можна розташовувати як на робочому листі, так і у формі. Наведемо список елементів керування в порядку їх розташування на панелі і їхнє призначення: · Напис - ім'я Label, призначена для висновка тексту у формі. · Поле -ім'я цього елемента керування по умовчанню - TextBox. Використовується для введення або виведення даних. У полі можна відобразити які-небудь дані або в поле можна ввести дані і прочитати їх із поля. · Список - ім'я ListBox. Використовується для виведення списку яких-небудь значень, із якого користувач може вибрати одне або декілька значень, що запам'ятовуються для подальшого використання. · Поле зі списком - ComboBox. Використовується для створення списку, що розкривається, із якого користувач може вибрати один з елементів або увести своє значення. · Прапорець - CheckButton. Використовується для виведення прапорця, що буває в однім із двох станів: є прапорець і немає. · Перемикач - OptionButton. Використовується для вибору одного з декількох альтернативних варіантів. · Вимикач - ToggleButton. Використовується для того, щоб відзначити одне з двох станів - включене/виключено. · Рамка - Frame. Використовується для угруповання елементів керування у формі. · Кнопка - ім'я CommandButton. Використовується для запуску процедур, пов'язаних із щиголями на кнопці. · Набір вкладок і Набір сторінок - TabStrip і Page. Створюють вікна діалогу, у яких розташовано декілька сторінок або декілька вкладок. · Смуга прокручування - ScrollBar. Виводить у формі смугу прокручування. · Лічильник - SpinButton. Виводить на екран елемент, що складається з двох стрілк нагору й униз, щиголі на який змінюють значення внутрішнього лічильника на одиницю. · Малюнок - Image. Використовується, щоб помістити у формі відображення графічного файла у форматі bmp, gif, jpg. · Редагування посилань - RefEdit. Цей елемент керування використовується для редагування посилань на клітини або діапазони. Кожний елемент керування розміщається у формі в процесі конструювання форми. Елементи керування мають властивості, що можна задати при роботі в режимі конструктора або в програмі, що виконується при запуску форми. Для встановлення властивостей елемента керування вручну при його конструюванні необхідно виділити елемент керування і натиснути кнопку Свойства панелі інструментів Элементы управления. На екрані відобразиться діалогове вікно Свойства. Після установки властивостей елементів керування і форми переходять до написання коду, пов'язаного з ними і з подіями, що ініційовані користувачем. У кожного елемента керування є цілий набір подій, що опрацьовують ті або інші дії. Наведемо деякі з них: · Click -щиголь мишею на елементі керування (частіше усього на кнопці або на елементі списку); · DblClick - подвійний щиголь мишею на елементі керування.
Код обробки подій записується у вікні коду (програми), що пов'язаний із формою. Для активізації вікна програми достатньо або двічі клацнути на елементі керування або натиснути кнопку Исходный текст панелі інструментів Элементы управления. У лівій верхній частині вікна програми знаходиться раскрывающийся список з іменами об'єктів, для яких у даній формі створюються процедури опрацювання подій. У цьому списку поданий поділ програми Загальна частина, де описуються переменные і константи рівня форми. У правій верхній частині вікна коду знаходиться поле зі списком, що містить імена подій, пов'язаних з обраним у лівій частині вікна об'єктом. На малюнку 5 приведене вікно коду (програми) форми з ім'ям UserForm1, у якому розкритий список подій для командної кнопки. Мал. 5. Вікно програми для форми UserForm1.
Загальні властивості елементів керування: · Caption -напис, відображуваний при елементі керування. · Enabled -якщо дорівнює True, то користувач може управляти елементом, у противному випадку елемент недоступний для користувача. · Name - ім'я елемента керування. При створенні елемента VBA установлює цю властивість по умовчанню. Наприклад, для першої створеної кнопки встановлюється ім'я CommandButton1, для другої - CommandButton2 і т.д. Ви можете змінити це ім'я за своїм бажанням. · ControlSource - джерело даних для елемента керування. Звичайно джерелом даних служить клітина або діапазон клітин. Елемент керування, для якого задана ця властивість, називається пов'язаним. При зміні даних в елементі керування вони відображаються в клітині і навпаки. Крім властивостей кожний елемент керування має методи, що виконують які-небудь дії над об'єктом. Загальні методи: · Add -добавляє елемент керування під час виконання програми. · SetFocus - встановлює фокус (активізує) на елементі керування, що викликав цей метод.
Перейдемо тепер до обговорення властивостей і методів кожного з елементів керування: 1) Поле -елемент керування TextBox використовується для введення тексту, що у наступному використовується в програмі, або для виведення результатів роботи програми. Основні властивості: · Text - повертає текст, що утримується в поле. Наприклад, оператор pr=TextBox1. Text у перемінну pr поміщає значення, що користувач ввів у текстове поле. Оператор TextBox1. Text=”Умови контракту виконані” у вікні текстового поля відображає зазначений текст. · Multiline - припустимі значення: True -встановлюється багатостроковий режим введення тексту в поле; False -одностроковий режим. · WordWrap - припустимі значення: True - встановлюється режим автоматичного переносу слів на нову строку; False - у противному випадку. 2) Кнопка -елемент керуванняCommandButton використовується для запуску процедур при натисканні на кнопку. Основна властивість Caption - текст, відображуваний на кнопці. 3) Список - елемент керування ListBox застосовується для збереження списку значень, із якого користувач може вибрати одне або декілька. Обрані значення можуть використовуватися в тексті програми для обробки вибору. Властивості: · ListIndex -повертає номер обраного елемента списку. Нумерація елементів списку починається з нуля. · ControlSource - задається клітина, у якій записується значення, обране зі списку. · RowSource - задає діапазон, у якому знаходяться значення, відображувані в списку. · ListCount - повертає число елементів списку. · ColumnCount - встановлює число стовпчиків у списку. · ColumnHeads - припустимі значення: True (виводяться заголовки стовпчиків списку, що розкривається,) і False (у противному випадку). · Value - повертає обраний елемент у списку. · Text - повертає обраний елемент у списку. · TextColumn - установлює стовпчик у списку, елемент якого встановлюється властивістю Text. · List(s1,s2) - повертає елемент списку, що розташован на перетинанні зазначених рядка s1 і стовпчика s2. · Selected - припустимі значення True (якщо елемент списку обраний) і False (у противному випадку). Використовується для визначення обраного елемента списку, якщо у властивості MultiSelect дозволений вибір декількох елементів списку. · MultiSelect - установлює засіб вибору елементів із списку. Припустимі значення: q FmMultiSelectSingle - вибір тільки одного елемента; q FmMultiSelectMulti - дозволений вибір декількох елементів за допомогою щиголя, або натисканням клавіші < Пробел>; q FmMultiSelectExtended - дозволене використання клавіші <Shift> при виборі ряду послідовних елементів списку. Наведемо найбільш часто використовувані методи елемента керування ListBox: · AddItem елемент - метод, що додає елемент у список. Наприклад, така процедура заповнює список з ім'ям ListBox1 днями тижня: Sub Тиждень() · RemoveItem номер - метод, що видаляє елемент списку з зазначеним номером. 4) Поле зі списком - елемент керування ComboBox застосовується для збереження списку значень, із якого користувач може вибрати одне значення або ввести своє. Поєднує у собі функціональні можливості cписка ListBox і поля TextBox. Властивості об'єкта такі, як ListIndex, ControlSource, RowSource, Value, ListCount, Enabled, List і методи Clear, RemoveItem, AddItem аналогічні відповідним властивостям і методам списку ListBox. Заповнити список або поле зі списком можна одним із таких засобів: 1. Поелементно за допомогою методу AddItem; 2. З діапазону, у котрий попередньо введені елементи списку. У цьому випадку у властивості RowSource записується діапазон. Це можна зробити при конструюванні форми у вікні властивостей або в програмі, написавши оператор: ListBox1. RowSource=”A1:B4”. Продемонструємо можливості роботи зі списками на прикладі. Приклад 5.1. Уявіть, що ви менеджер невеличкої фірми. У вас на листі Excel з ім'ям «Співробітники» зберігається список усіх співробітників фірми, і вам необхідно скласти список відпусток на якийсь місяць поточного року. Щоб справитися з цією складною роботою, ви створюєте форму і пишете до неї програму, що дозволяє вибрати пору року, потім вибрати місяць, що належить до цієї пори року, а потім відібрати співробітників фірми, що йдуть у відпустку в обраному місяці. Список відпускників поміщається на новий лист. У формі розташовані такі елементи керування: · Рамка - Frame1, усередині якої розташовані 4 перемикача для вибору пори року - OptionButton1, OptionButton2, OptionButton3, OptionButton4. Властивості Caption цих перемикачів змінені на «Зима», «Весна», «Літо», «Осінь» відповідно. · Список, що розкривається - ComboBox1, розташований під написом «Виберіть місяць». При конструюванні список залишений порожнім. Заповнюється список у процедурах, призначених на щиголь у кожному з перемикачів. При конструюванні встановлена властивість MathRequired=True, щоб не можна було б ввести свою назву місяця, а можна було тільки вибрати зі списку. Мал. 6. Форма для формування списку відпускників.
· Список - ListBox1. У цього елемента при конструюванні змінені такі властивості: q ColumnCount = 2, щоб відображати в списку два стовпчики; q MultiSelect = 1(fmMultiSelectMulti), щоб розв'язати вибір декількох елементів із списку; q RowSource = Співробітники! B3:C15, щоб у ListBox1 відображався список співробітників, розташований на листі «Співробітники» в клітинах B3:C15. q ListStyle = 1(fmListStyleOption), щоб перед кожним елементом у списку розташовувався прапорець і вибір елемента зі списку відповідав установці цього прапорця; q ColumnHeads = True, щоб над колонками списку були розташовані заголовки; q TextColumn = 1, щоб властивістю Text поверталися обрані значення першого стовпчика.
· Командна кнопка - CommandButton1, у якої властивість Caption замінена на «Записати відпускників». Крім того, змінена властивість Font.
Програми, пов'язані з формою:
Sub CommandButton1_Click() ‘ Ця процедура переглядає всі елементи списку ListBox1 і ‘ елементи,що обрані, записує на новий лист. ‘ При цьому рахується кількість виділених елементів. Dim ks As Integer, i As Integer, k As Integer k = 0 'Це лічильник числа відпускників Worksheets. Add ‘додаємо новий лист ActiveSheet. Name = "Відпускники " & ComboBox1. Value Range("A1"). Value = "№ пп" ‘ заголовки колонок Range("B1"). Value = "Прізвище співробітника" Range("С1"). Value = "Посада" Range("A1:С1"). Font. Bold = True Range("A1:С1"). Borders(xlEdgeBottom). LineStyle = xlDouble ks = ListBox1. ListCount ‘ кількість елементів у списку For i = 0 To ks - 1 ‘цикл по всіх елементах списку If ListBox1. Selected(i) Then ‘якщо елемент списку обраний ‘то властивість Selected(i) i-го елемента дорівнює True k = k + 1 ActiveCell. Offset(1, 0). Select ActiveCell. Value = k ActiveCell. Offset(0, 1). Value = ListBox1. List(i,0) ‘записуємо прізвище ActiveCell. Offset(0,2). Value=ListBox1. List(i,1) ‘записуємо посаду End If Next i ActiveCell. Range("A1:С1"). Select Selection. Borders(xlEdgeBottom). LineStyle = xlDouble ActiveCell. Offset(1, 0). Select ActiveCell. Value = "Усього йдуть у відпустку - " & k & " робітників" Range("B1:B" & CStr(k + 1)). Select Selection. Columns. AutoFit Range("A1"). Select End Sub
Private Sub OptionButton1_Click() ‘ Ця процедура починає працювати, якщо обрана «Зима» ‘Формується список зимових місяців ClearList ' виклик процедури, яка очищує список, що розкривається ComboBox1. AddItem "Грудень" ComboBox1. AddItem "Січень" ComboBox1. AddItem "Лютий" ComboBox1. Value = "Грудень" ‘ активизується перший місяць End Sub
Private Sub OptionButton2_Click() ‘ Ця процедура починає працювати, якщо обрана «Весна» ‘ Формується список весняних місяців ClearList ComboBox1. AddItem "Березень" ComboBox1. AddItem "Квітень" ComboBox1. AddItem "Травень" ComboBox1. Value = "Березень" End Sub
Private Sub OptionButton3_Click() ‘ Ця процедура починає працювати, якщо выбрано «Літо» ‘Формується список літніх місяців ClearList ComboBox1. AddItem "Червень" ComboBox1. AddItem "Липень" ComboBox1. AddItem "Август" ComboBox1. Value = "Червень" End Sub
Private Sub OptionButton4_Click() ‘ Ця процедура починає працювати, якщо обрана «Осінь» ‘Формується список осінніх місяців ClearList ComboBox1. AddItem "Вересень" ComboBox1. AddItem "Жовтень" ComboBox1. AddItem "Листопад" ComboBox1. Value = "Вересень" End Sub
Sub ClearList() ‘ Ця процедура очищає список, що розкриваэться від елементів, ‘ які були додані в нього раніше Dim k As Integer, i As Integer k = ComboBox1. ListCount ‘ обчислення кількості елементів у списку If k > 0 Then ‘ якщо елементи в списку є, то Do ‘ починаємо цикл по видаленню елементів списку ComboBox1. RemoveItem (0) ‘ видаляємо елемент списку k = ComboBox1. ListCount Loop While k > 0 ‘ цикл, поки не видалимо всі елементи списку End If ComboBox1. Value = "" End Sub
Private Sub UserForm_Initialize() ‘ Ця процедура працює при відкритті форми, вона активізує ‘ ‘ лист з інформацією про співробітників фірми Worksheets("Співробітники"). Activate End Sub
Мал. 7. Форма в процесі роботи.
Продовжимо вивчення елементів керування у формах, їхніх властивостей і методів.
5) Перемикач -елемент керування OptionButton. Перемикач може бути в однім із двох станів - обраний, тоді усередині чорна точка, або ні. Перемикачі звичайно групуються за допомогою рамки (Frame) і тоді з групи перемикачів може бути обраний тільки один. При виборі такого перемикача попередній скидається. Властивості: 6) Прапорець -елемент керування CheckButton. Властивості ті ж, що й у перемикача, але з групи прапорців можна встановлювати скільки завгодно. 7) Набір сторінок - елемент керування MultiPage. Цей елемент керування реалізує діалогові вікна, що складаються з кількох сторінок. Заголовки сторінок відбиваються на вкладках. Перехід від сторінки до сторінки здійснюється вибором вкладки за допомогою щиголя кнопкою миші. Об'єкт MultiPage містить у собі сімейство Pages, що є набором сторінок, що входять у цей об'єкт. Властивості об'єкта MultiPage: · Value, BoundValue - повертає номер активної сторінки. Нумерація провадиться з 0. · SelectedItem - повертає обрану сторінку. Сімейство Pages має єдину властивість - Count, щоповертає число елементів сімейства. Крім того, у сімейства Pages є такі методи: · Add - створює нову сторінку. · Clear - видаляє всі сторінки із сімейства. · Remove - видаляє сторінку із сімейства Pages. · Item - повертає сторінку з зазначеним індексом. Синтаксис: Set Object = object. Item(індекс).
8) Набір вкладок - елемент керування TabStrip дозволяє створити декілька вкладок у діалоговому вікні. Містить у собі сімейство Tabs, що подає собою набір усіх вкладок. Об'єкт TabStrip і сімейство Tabs має такі ж властивості і методи, що й об'єкт MultiPage і сімейство Pages. 5.2 Приклади створення форм Приклад 5.2. Створимо просту форму, що вводить два числа, дозволяє вибрати арифметичну операцію, яку необхідно зробити над числами, і виводить результат. На малюнку 8 приведене вікно форми в режимі конструктора, що містить: - три текстових поля TextBox1, TextBox2, TextBox3 для введення двох чисел і виведення результату; - групу перемикачів OptionButton1, OptionButton2, OptionButton3, OptionButton4 для вибору операції; властивості Caption кожного перемикача замінені знаками операцій; - командну кнопку CommandButton1для запуску процедури обчислення; властивість Caption кнопки замінено словом «Обчислити»; - напису біля текстових полів, що пояснюють їхнє призначення.
Мал. 8. Конструювання форми приклада 5.2.
З кнопкою CommandButton1 пов'язана процедура, що починає працювати при щиголі мишею на кнопці. Щоб написати текст процедури, необхідно двічі клацнути на кнопці при конструюванні форми. Відчиняється вікно коду, у якому записуємо приведений нижче текст. Заголовок процедури і її ім'я будуються автоматично, тому що ім'я зв'язується з ім'ям об'єкта і подією, за якою запускається процедура. Private Sub CommandButton1_Click() Dim x As Single, y As Single, r As Single If IsNumeric(TextBox1. Value) Then x = TextBox1. Text Else MsgBox "Введіть перше число" TextBox1. SetFocus End If If IsNumeric(TextBox2. Value) Then y = TextBox2. Text Else MsgBox "Введіть друге число" TextBox2. SetFocus End If If OptionButton1. Value Then z = x + y TextBox3. Text = z End If If OptionButton2. Value Then z = x - y TextBox3. Text = z End If If OptionButton3. Value Then z = x * y TextBox3. Text = z End If If OptionButton4. Value Then If y = 0 Then MsgBox "Неприпустиме значення знаменника" TextBox2. SetFocus Else z = x / y TextBox3. Text = z End If End If End Sub
Приклад 5.3. Створимо форму, що буде добавляти запис в приведений на мал. 9 список, розташований на листі Excel.
Мал. 9. Список клієнтів готеля.
Збоку списку на листі Excel розташований впроваджений об'єкт - командна кнопка з ім'ям CommandButton1, що викликає на екран діалогове вікно - форму з ім'ям UserForm1. У властивості Caption командної кнопки записаний текст «Реєстрація клієнта», у властивості Font зазначений розмір 10. Щоб упровадити кнопку на лист, виконайте такі дії: 1. Натисніть кнопку “Конструктор” на панелі інструментів Visual Basic. 2. Натисніть кнопку «Елементи керування» на панелі інструментів Visual Basic. 3. Клацніть мишею на елементі керування Кнопка, а потім клацніть на листі Excel. На листі з'явиться кнопка з написом CommandButton1. 4. Щиголем правої кнопки миші викликайте контекстне меню кнопки і відчиніть вікно властивостей. Змініть властивості Caption і Font як зазначено вище. 5. Щоб зв'язати з подією - щиголь миші на кнопці - процедуру виклику форми, двічі клацніть на кнопці. Відчиниться вікно модуля, у котрому вже побудований заголовок процедури за таким правилом: спочатку вказується ім'я об'єкта, а потім після символу “ _ ” -ім'я події, при якому визивається процедура. Запишемо такий текст:
Sub CommandButton1_Click() UserForm1. Show ‘активизація форми з ім'ям UserForm1 End Sub
Тепер перейдемо до конструювання форми для додавання даних про нового клієнта в список. Для цього відчиніть вікно редактора Visual Basic, вставте новий об'єкт UserForm і розмістіть на ньому елементи керування, як показано на мал. 10. У формі розташовані такі елементи керування: · Текстове поле TextBox1, розташоване поруч із написом «Прізвище». Стандартні властивості цього поля не змінювалися при конструюванні. · Текстове поле TextBox2 для введення імені і по батькові клієнта. · Група перемикачів: OptionButton1, у якого властивість Caption замінена на слово «чоловік», і OptionButton2, у якого властивість Caption замінена на слово «жінка». · Група прапорців: CheckBox1, у якого властивість Caption замінена на «Оплачено», і CheckBox2, у якого властивість Caption замінена на «Паспорт зданий». · Список, що розкривається, ComboBox1. У цього об'єкта була змінена властивість RowSource, для якого зазначений діапазон клітин активного листа, що містить список усіх типів номерів готеля: М3:М6. У цих клітинах утримуються такі дані:
Мал. 10. Діалогове вікно користувача - форма UserForm1 у режимі конструювання. · Текстове поле TextBox3 для відображення значення лічильника SpinButton1. · Лічильник SpinButton1. Властивість Value цього елемента керування змінюється на 1 при кожному щиголі на одну зі стрілок. · Кнопка CommandButton1, властивість Caption цієї кнопки змінено на «ОК». З кнопкою пов'язана процедура занесення даних про клієнта в перший вільний рядок, що знаходиться за списком. Текст процедури:
Private Sub CommandButton1_Click() Dim ks As Integer Range("A1"). Select ks = ActiveCell. CurrentRegion. Rows. Count ' Підрахунок кількості ‘зайнятих рядків у списку ActiveCell. Offset(ks, 0). Select 'Активизація першого ‘вільного рядка списку ActiveCell. Value = TextBox1. Text ‘ в список пишемо прізвище ActiveCell. Offset(0, 1). Value = TextBox2. Text ‘в сусідню клітину ‘пишемо ім'я і по батькові If OptionButton1. Value = True Then ‘ якщо відзначений перший ActiveCell. Offset(0, 2). Value = "чоловік" ‘перемикач, то Else ActiveCell. Offset(0, 2). Value = "дружин" End If ActiveCell. Offset(0, 3). Value = ComboBox1. Value ‘ Пишемо тип ‘ номера, обраний із списку If CheckBox1. Value = True Then ‘ Якщо відзначений прапорець ‘«Оплачено», то ActiveCell. Offset(0, 4). Value = "да" ‘ записуємо слово «да» Else ActiveCell. Offset(0, 4). Value = "ні" End If If CheckBox2. Value = True Then ‘ Якщо відзначений прапорець ‘«Паспорт зданий», то ActiveCell. Offset(0, 5). Value = "да" ‘ записуємо слово ‘«да» у п'ятий стовпчик Else ActiveCell. Offset(0, 5). Value = "ні" End If ActiveCell. Offset(0, 6). Value = SpinButton1. Value ‘ шостий ‘стовбчик пишемо значення лічильника End Sub
· Командна кнопка CommandButton2, у якої властивість Caption змінена на слово «Да». З цією кнопкою пов'язана процедура, що очищає всі елементи керування у формі, підготовлюючи їх для введення даних про нового клієнта. Текст процедури:
Private Sub CommandButton2_Click() TextBox1. Text = "" TextBox2. Text = "" TextBox3. Text = "" CheckBox1. Value = False CheckBox2. Value = False SpinButton1. Value = 0 End Sub
Така процедура призначена для відображення значення лічильника в текстовому полі TextBox3: Private Sub SpinButton1_Change() TextBox3. Value = SpinButton1. Value End Sub
6 Література
1. Гарнаев А.Ю. Использование MS Excel и VBA в экономике и финансах. – СПб.: БХВ – Санкт-Петербург, 1999. – 336с., ил. 2. Гарнаев А.Ю. Самоучитель VBA. - СПб.: БХВ – Санкт-Петербург, 1999. – 512с., ил. 3. Кузьменко В.Г. VBA 2000. – М.: ЗАО «Издательство БИНОМ», 2000. – 408с.: ил.
Дата добавления: 2014-10-23; Просмотров: 5120; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |