0: Привет. В этом видео мы рассмотрим с вами основные окна в ввп проекте, а также создадим приложение калькулятор. Но сперва я хочу порекомендовать сайт id прогер точка ком. На этом сайте вы найдёте код, домашние задания и много другой полезной информации. Ссылка на этот урок на сайте.
1: И будет в описании к этому видео. Итак, 1, о чем нам стоит поговорить, так это об общей структуре впф проекта. Когда вы впервые создаёте впф проект, то у вас сразу создаётся несколько файлов, открывается несколько вкладочек. Ну и изначально все это может
2: Даже немного отпугнуть. На самом то деле здесь не все так страшно. Ну и сейчас мы с вами рассмотрим основные вкладки и основные файлы, которые у нас здесь были созданы. Давайте поначалу поговорим про основные файлы. Здесь у нас создано всего лишь 2 файла и оба этих
3: Файла, они описывают какую-либо страничку, какое-либо окно внутри нашего приложения, внутри нашего, вернее, проекта. На данный момент у нас есть лишь 1 окно, это основное окно, вот оно здесь как раз и представлено, ну и для описания какого-либо окна.
4: Всегда используется 2 файла в 1 файле у вас описывается весь дизайн вашего окна. То есть здесь, в этом файле, я могу, например, изменить размеры самого окна. Если мне это нужно, я могу установить какие-либо новые объекты, я могу к этим объектам добавить.
5: Ну и в принципе, я могу создать тот дизайн, который я сам захочу. И здесь же вы ещё можете заметить, что у нас вот этот вот файл, он имеет расширение точка кзам, то бишь для описания дизайна. Мы с вами используем такой язык, который называется как зал и что
6: Чтобы создать сам дизайн, мы, во первых, можем просто перетягивать различные объекты на само окошко. Ну а во вторых, мы можем писать код самостоятельно, можем его писать вот здесь, внизу и этот код, он, видите, очень схож с языком html.
7: Или, вернее, с языком иксэмэль. И по факту вы здесь просто прописываете различные теги, тем самым создавая различные объекты внутри вашего окна, внутри вашего приложения. Ну и чуть позже, в ходе этого урока мы действительно будем писать здесь код, будем создавать новый
8: Дизайн для нашего окна, то бишь 1 файл, он описывает просто графическую составляющую, составляющую вашего окна. Во 2 файле описывается вся функциональность для вот этого самого окна. То есть, например, вы здесь добавите
9: Какие-либо кнопочки и дальше во 2 файле вы можете указать, какие действия будут происходить, например, при нажатии на эти кнопки. Ну это банальный пример, но в целом вы тут можете описать любой функционал, который будет относиться конкретно к вот этому вот окну, если в будущем вы
10: Захотите создать ещё какое-либо окошко внутри вашего приложения, то, соответственно, вы создаёте, ну, по факту новое окно, а в этом новом окне будет тоже 2 файла. 1 файл будет описывать графическую составляющую, a2 файл будет описывать всю
11: Функциональную составляющую, составляющую этого окна. Ну и в ходе этого урока мы пока будем работать только с 1 окошком. Ну и соответственно, в этом окошке мы пропишем как дизайн, так и пропишем функциональную составляющую дополнительно. Давайте поговорим про различные
12: Окошки, которые также здесь были открыты в самом верху мы можем найти окошко, обозреватель решений внутри этого окошка находятся полностью все те файлы, которые принадлежат к нашему проекту, например, здесь я могу найти файл, который называется как app config внутри этого файла.
13: Описываются глобальные характеристики для нашего проекта. Ну и, соответственно, в будущем, если нам потребуется описать какую-то глобальную характеристику, то также можно будет описать её внутри этого файла. Также здесь мы можем найти app экземпл и, по сути, вот здесь, в a apk.
14: Мы найдём основной класс, который тоже называется именно как app. И внутри этого основного класса будет метод, который называется как main, с которого как раз и начинается запуск всей программы. Мы на самом то деле в ходе этого курса не будем работать с этим.
15: Классом в то же время, если вам в будущем потребуется изменить вот это вот начальное окошко, которое будет запускаться при старте программы, то это можно сделать как раз вот здесь, внутри этого класса. То есть вот сейчас у нас здесь указано то, что при запуске все
16: Проекта у нас будет запускаться изначально такое окошко, которое называется как main window, точка экзем. То есть это по факту вот это вот наше окошко. В то же время вы можете поменять это значение и указать, например, что при старте программы у вас будет запускаться какое-либо
17: Другое окно. Опять же, в ходе этого курса мы с этим классом работать не будем, но вы просто можете знать, что это основной класс, внутри которого находится вот этот основной метод, через который и происходит запуск всего нашего проекта. Ну и также здесь же
18: В обозревателе решений мы можем найти все те окна, которые есть внутри нашего проекта. На данный момент у нас есть лишь 1 окошко, это main window. Мы можем просто 2 раза нажать как бы на main window, и у нас откроется вот этот вот файлик экзем, либо же можем раскрыть
19: Ну, как бы вот это окно. И здесь мы найдём класс main window, который служит как раз для описания всего функционала, который будет соответствовать вот этому вот окну, то бишь в обозревателе решения находятся полностью все те файлы, которые принадлежат к
20: Нашему проекту, если посмотреть чуть ниже, то здесь мы найдём окошко свойства и через это окошко мы можем устанавливать различное оформление. Различные свойства для всевозможных объектов, которые будут у нас на страничке в нашем окне. Ну и вот, например, давайте я
21: Сейчас с вами выберу само окно, причём я не хочу выбрать объект grid, который вот здесь у нас есть внизу, вместо этого я хочу выбрать объект windows, я просто могу нажать на сам этот тэг, ну и таким образом я выбираю как бы все окно, всю нашу вот эту вот страницу, и если
22: Если я выберу всю нашу страницу, то в таком случае здесь в свойствах я могу добавлять различные характеристики, различные настройки сразу ко всему нашему окошку. Что это означает? Вот, например, давайте мы зайдём во внешний вид и здесь
23: Я могу установить как бы новый новый дизайн для всего нашего окна. На данный момент у нас для окна есть вот этот вот верхний тулбар, то есть это верхняя менюшка для нашего окна, и я могу эту менюшку просто убрать для этого.
24: Я беру вот здесь свойство windows style и просто нажимаю на него и выбираю, например, значение none. После этого, видите верхнее меню, оно просто убралось ну и теперь, если я запущу проект, то я не смогу его не скрыть, я не смогу его не вообще закрыть.
25: То есть у меня не будет вот этих вот функций, которые были изначально в верхней, в верхней менюшке. Я, пожалуй, все-таки оставлю, чтобы у нас тул виндоу, чтобы у нас вот это вот как бы верхнее меню было. Причём тул виндоу. Это, кстати, просто вверх.
26: Меню, в котором будет исключительно кнопка закрыть. Я все-таки, наверное, давайте укажу как three дип бордер виндоу. В таком случае у меня здесь будет 3 кнопки это закрыть, свернуть или же раскрыть на весь экран. Ну и пускай именно вот такие кнопки у меня все-таки здесь
27: Будут. Также здесь можно указать и другие различные настройки. Например, вы можете указать, какой основной текст будет использовать. Ну какой шрифт у вас будет использоваться на этом окошке. Вы можете указать размер шрифта, сказать, что он будет у вас жирным или же, наоборот, не жирным.
28: Также здесь вы можете указать, например, подпись для самого этого окошка. Ну и, например, давайте здесь мы напишем что-то в духе наша программа, нажимаем enter и видите, здесь вместо main window теперь пишется именно наша программа. Ну, конечно, текст можете какой угодно.
29: Показать. Ну и по факту здесь есть очень много различных свойств. Все эти свойства отличаются в зависимости от того, какой объект мы с вами выбрали. Вот, например, сейчас я выбрал объект grid, и здесь уже будут немного другие свойства. Например, мы можем уже здесь указать, указать курсу.
30: Какой, какой он здесь будет можем уже уже здесь поработать с макетом. То есть можем установить ширину, высоту и так далее. То есть в зависимости от объекта будут разные свойства разобраться с этими свойствами. Очень просто вы можете просто читать, что как бы
31: Ну что как бы здесь описано. И, соответственно, добавлять различные свойства к различнейшим объектам. Мы особо сильно работать сейчас с вот этой вот панелькой панелькой не будем, но в ходе курса к ней будем часто обращаться, ну и, соответственно, так понемногу её и
32: Изучим, пока просто не будем изучать каждое отдельное свойство, потому что это просто будет нелогично как-то. Ну и прежде чем мы приступим к написанию нашей программы, мы давайте рассмотрим ещё 1 окно. Это окно, оно у меня здесь не открыто. И кстати, если вдруг у вас
33: Какое-либо окошко не открыто. То есть вот, например, обозреватель решений или свойства. Если этих окон у вас нет, то вы их все можете добавить через вкладку вид, например, вот здесь можно добавить обозреватель решений. Ну и так дальше вот я, например, хочу добавить такое окно.
34: Которая называется как панель элементов. Вот я его здесь добавил, ну и вот оно у меня здесь как раз сейчас отображается, что же это за окно такое. В этом окне представлены различные элементы, которые мы можем просто брать и перетягивать на само. Ок.
35: Но на саму нашу программку, тем самым мы будем создавать тот дизайн, те объекты, которые нам будут нужны. То есть, например, если я хочу создать там, чтобы у нас здесь была какая-то кнопка, то в таком случае, ну я могу, конечно же, из быстрых объектов это
36: Все перетащить сюда, но также я могу просто здесь обратиться к поиску. Здесь, например, могу прописать батон. Ну, в таком случае нахожу необходимый для меня объект, просто его сюда перетягиваю. И вот у меня здесь как бы есть уже кнопка, например, если я это все запущу, что давайте, кстати, вам с вами тоже сделаем
37: То после запуска у нас уже на окне будет 2 объекта. Это прогресс, бар, а также кнопка, конечно же, никаких функций у этих объектов не будет, но в то же время мы хотя бы их просто с вами уже создали. И вот видите, здесь есть какая-то полноценная определённая кнопка. Ну давайте, пожалуй,
38: Пока все с вами закроем, так как это нас сейчас не особо интересует. Итак, теперь давайте приступим к разработке калькулятора. Для начала я предлагаю поменять название нашей программы. Пускай так и будет написано как калькулятор, а также я предлагаю поменять высоту и
39: Ширину нашей программы можно, конечно же, высоту и ширину менять вот здесь через графический редактор, но я предлагаю это все поменять вот здесь, то бишь просто через настройки, через код, вернее ну и давайте, например, высоту укажем как 350, а ширину, ну допу.
40: Допустим, давайте укажем, как 500 пикселей, к примеру, вот такой у нас будет калькулятор такой вот такой он у нас будет по размерам. Теперь мы давайте с вами сделаем вот что мы возьмём вот эту вот нашу основную сетку и здесь в 1 очередь
41: Добавим к ней просто название. То есть, то есть по этому названию мы в дальнейшем через код сможем как бы обратиться конкретно к этому элементу. Ну из этого элемента мы сможем вытащить, например, все кнопки, все текстовые надписи, ну и в дальнейшем сможем с ними работать.
42: Поэтому сперва просто указываем здесь название, и чтобы указать название, мы должны прописать икс, потом двоеточие нейм и дальше указываем само по себе название, название может быть каким угодно. Я давайте здесь, например, пропишу название как main рут.
43: Ну, то есть, например, главный контейнер, вот, ну, или main грид можно было бы назвать, ну, в общем, тут название может быть каким угодно. И также давайте мы ещё здесь пропишем дополнительно некие стили и в качестве стилей я тут просто укажу бэкграунд, то есть это буде
44: Цвет заднего фона. Цвет можно указать каким угодно. Например, можете прописать ред, ну и соответственно, он будет у вас красным. Я же все-таки укажу белый фон, хоть он здесь и так у нас белый был, но все-таки лучше это указать ещё программно, дабы 100
45: Процентов. Убедиться в том, что он у нас явно будет именно белым. Окей. Теперь следующее, что нам необходимо сделать, так это, по сути, нам нужно начертить ряды и столбцы внутри нашего проекта, внутри нашего окна. Вернее, смотрите, что у нас будет нам необхо.
46: Необходимо сделать 5 рядов, то есть это будет тут 5 как бы рядов друг под другом. Они будут расположены и нам необходимо создать 5 столбцов. Ну и соответственно, в каждой определённой ячейке мы будем располагать либо какую-то текстовую на
47: Надпись либо кнопку. Ну и в принципе, больше даже для текст, для калькулятора ничего не нужно. То есть только текстовая надпись, либо же кнопка. Ну и давайте вот сейчас такие ряды, мы с вами ряды и столбцы мы с вами как раз и сделаем. Чтобы их создать, мы должны здесь прописать как бы новый
48: Объект, ну, новый тэк, можно сказать, и здесь мы прописываем с вами грид точка роу дефинишен. То есть мы как бы описываем сейчас с вами различные ряды, как я уже сказал, я хочу сделать 5 рядов, поэтому я открыл вот этот вот
49: Объект и внутри него я просто прописываю 5 раз прописываю вот этот вот raw дефинишн вот такой вот тег и таким образом я создам как раз 5 рядов то есть 1, 2, 3, 4, 5 ну и вот у нас видите вот здесь они появились вот у нас 5 рядов 1, 2, 3.
50: И 4, и 5. Вот внизу ряд. Теперь дополнительно я хочу создать ещё и столбцы. Для этого я обращаюсь к Такому тегу, как great колм дефинишен. И здесь мы, по сути, прописываем точно тоже самое, вот только в этот
51: В этот раз мы используем такой тег, который называется как calm дефинишн. Ну и нам тоже потребуется 5 таких, соответственно, я здесь их все и прописал. Ну и вот так это сейчас выглядит. То есть, видите, у нас есть как бы определённые теперь ячейки и в каждую из этих
52: Ячеек мы сможем в дальнейшем вставить, ну какой угодно объект, например, кнопку сможем вставить текстовое поле, там поле для ввода информации. Ну все, что угодно. Мы вот в эти ячейки теперь можем вставлять, нам причём это будет делать очень и очень удобно. Ну,
53: И в 1 очередь мы, давайте вот здесь, в самом верху, мы просто укажем, что у нас будет некая текстовая надпись. И в эту текстовую надпись мы будем выводить все те данные, что будет вводить пользователь через калькулятор. То есть, например, он нажмёт там на 2
54: И, соответственно, эта двоечка, она вот здесь будет выводиться, нажмёт на 3, и эта троечка, она тоже здесь будет выводиться. Ну то есть принцип будет как у самого обычного калькулятора. И поэтому нам необходимо здесь создать новый объект, который у нас будет называться как текст блок именно
55: Этот тег, именно этот объект, он отвечает за создание некой текстовой надписи. Если я сейчас просто закрою текст блок, если я просто закрою сейчас этот текстовый объект, то по факту мы его даже здесь особо с вами не можем заметить. Не можем мы его заметить по той причине, поскольку мы не
56: Указали, где конкретно он должен у нас находиться, ну и чтобы указать, где конкретно он у нас будет находиться, мы обращаемся к grid row, и нам нужно сказать, что я хочу, чтобы он располагался у нас вот в 1 этой ячейке, причём сейчас я указываю ряд, и чтобы
57: Указать как бы 1 ряд, то мне нужно указать здесь число 0, потому что здесь идёт исчисление, начиная с числа 0 точно так же, как это было в массивах. Да, поэтому, чтобы указать как бы 1 ряд, нужно указать его индекс, а его индекс это
58: 0. Ну, соответственно, я говорю, что наша текстовая надпись, она будет находиться сейчас вот в этом ряду. Также я бы хотел указать, что наша текстовая надпись, она должна в ячейке тоже находиться по индексу 0. В таком случае вот эта вот текстовая надпись, она будет
59: Находиться конкретно вот в этой ячейке, потому что ряд мы указали по нулевому индексу и ячейку мы тоже указали по нулевому индексу, чтобы убедиться в том, что текстовая надпись, она у нас сейчас будет выводиться именно в 1 ячейке, то мы давайте дополнительно здесь добавим ещё
60: Свойство текст и просто будем выводить какую-либо текстовую надпись. Сейчас можно заметить, что текстовая надпись, она выводится у нас в 1 столбце в 1 ряде. Соответственно, мы все указали с вами корректно. И вот давайте сейчас на секунду мы оторвёмся от
61: Создание нашей программки. И просто предположим, что я хочу расположить эту текстовую надпись, например, вот в этой ячейке. Я предлагаю вам сейчас поставить видео на паузу и попробовать самостоятельно расположить текстовую надпись в этой ячейке, но также покажу, как это можно сделать.
62: Чтобы расположить текстовую надпись, вот здесь нам изначально нужно указать, что текстовая надпись будет находиться как бы во 2 ряду, и чтобы это указать, мы просто указываем здесь индекс. Ну, соответственно, индекс это будет единица, чтобы же указать, что она у нас будет находиться как бы в 3.
63: Колонки. Нам необходимо тоже здесь указать. Просто индекс этой колонки, а соответственно, это будет число 2. Ну и вот мы расположили эту текстовую надпись в верной для нас ячейке. Таким же образом вы можете располагать любые другие объекты в любых колонках, в любых вернее,
64: Ячейках, где вам только этого захочется. Я все-таки оставлю здесь значение по нулям просто по той причине, что я хочу, чтобы текст находился именно вот в этой 1 ячейке. И ещё 1 небольшой нюанс. Все вот эти вот настройки ко всем объектам, которые мы пропис
65: Вы можете прописывать как через код, так и можете прописывать через вкладку свойства. Вот, например, сейчас я дописывал текстовую надпись для текст блок для вот этого объекта. И если выбрать текст блок, сам этот объект, то здесь в свойствах
66: Вы также найдёте как раз вот это вот это свойство, текст и тоже его здесь можете спокойно поменять, например, напишу hello, 1, 2, 3. И можно заметить, что здесь у нас эта текстовая надпись поменялась. Ну и, конечно же, здесь она тоже у нас поменялась, то бишь вот эти вот все.
67: Настройки, все эти характеристики можно прописывать через код, а можно прописывать через вкладку свойства. Мы сейчас через вкладку свойства это все прописывать не будем. Просто по той причине, что нам необходимо научиться самостоятельно писать все вот эти вот свойства. Нам нужно просто их лучше, как
68: Для себя запомнить. И по этой причине мы лучше их будем прописывать сами через код, но в дальнейшем, конечно, можете обращаться к вкладке свойства и все здесь уже прописывать. Мы давайте пока лучше к ней не будем обращаться просто чтобы лучше нам все эти свойства запомнить. Ну и
69: Теперь дополнительно, что я ещё хочу указать, я хочу указать, что вот эта вот текстовая надпись, она должна у нас занимать все абсолютно вот эти вот столбцы. И, кстати, я сейчас смотрю, я все-таки допустил ошибку. Нам не нужно 5 столбцов, нам нужно всего лишь 4 столбца.
70: Поэтому давайте я 1 calum денейн, я просто удалю. Ну и в таком случае у нас будет 4 всего лишь столбца, это будет более корректно. То есть здесь будут кнопки 1, 2, 3, а здесь, например там знак плюс здесь минус, ну и так дальше. То есть вот эти вот кнопки мы здесь пропишем и 5 ряд, он нам 5 столбец.
71: Вернее, он нам тут просто не нужен, поэтому calm дефенишн 1 я просто удалил. Так вот, что я хочу сделать. Я хочу указать то, что вот эта текстовая надпись, она у нас должна занимать все 4 столбца, чтобы нам такое указать. Мы здесь обращаемся с вами к great.
72: Спан, то есть как бы к объединению столбцов и указываю, что здесь мы расположим эту текстовую надпись на все 4 столбца. Если бы, кстати, вы хотели расположить эту текстовую надпись, например, на 3 ряда, или на 2 ряда, или на 4 ряда
73: То в таком случае нужно было бы использовать не значение калан спан, а нужно было бы использовать значение raw спан. Ну и видите вот сейчас у нас например текстовая надпись, она как бы занимает 4 ряда вот ну мне такое не нужно, поэтому я все-таки верну к колм спан и она у нас будет занимать 4
74: А вот в общем то, мы и прописали саму текстовую надпись, наверное, только, пожалуй, мы к ней давайте ещё добавим икс нейм, то есть мы обращаемся к x двоеточие нейм и x name, как я уже говорил, это просто идентификатор, это просто подпись.
75: Самого объекта нам нужно указать идентификатор для текстовой надписи, потому что с этой текстовой надписью мы будем работать через класс, который работает с функциями, да, и чтобы просто обратиться к этой текстовой надписи, нам нужно
76: Нужно указать для неё здесь хоть какое-то название, хоть какой-то идентификатор, что мы как раз с вами здесь и делаем название можно указать какое угодно. Я, например, укажу название, например, как text label, но, конечно, можете указать любое название, какое только захотите. Окей, с текстовой надписью мы теперь
77: С вами разобрались. Следующее, что нам необходимо сделать, так это нам необходимо во всех вот этих вот ячейках расположить необходимые кнопки, как можно расположить кнопки? Во первых, вы, конечно же, все эти объекты можете располагать при помощи панели элементов. То есть вот я открываю
78: Элементов и например сюда перетаскиваю какую-либо кнопку ну и вот эта кнопка она сюда добавляется действительно здесь все есть уже сразу необходимое и в общем то таким образом тоже это все можно прописывать но поскольку мы уже создали с вами сетку, поскольку мы
79: Уже прописали здесь ряды и столбцы, то нам куда удобнее будет уже не пере, не перетаскивать вот эти вот все объекты. А куда удобнее будет прописать все самостоятельно. Поэтому я даже пока закрою эту панель элементов и буду все это прописывать самосто.
80: Стоятельно. Для этого я здесь просто открываю тег button, вернее, так прописывается и здесь. Давайте я пока его открою и сразу закрою. И здесь, если, если я пропишу, например, число 1, ну или я могу здесь на самом деле все, что угодно прописат.
81: То вот это вот число, это будет как бы текст для самой по себе кнопки и все, что нам здесь ещё остаётся сделать, так это просто нужно указать, где конкретно будет находиться сама эта кнопка. Например, калам мы здесь указываем как 0 a great роу. Ну, вернее, давайте я ещё раз попробую.
82: Grid row мы указываем, например, как 1, ну и вот в таком случае, видите, кнопка у меня находится здесь и текст на ней как раз единичка, все прописано логично, я уже кнопки подготовил, давайте я их сюда просто вставлю, ну и вот эти кнопки, вернее.
83: 1 не стоило мне удалять. Давайте я ещё раз попробую вот все эти кнопки. То есть вот 1, 2, 3, 4, вот они все у меня здесь расположены дополнительно. Я добавил сюда ещё кнопки минус умножить также разделить плюс добавил кнопку равенства, ну и кнопку.
84: То есть это кнопка при нажатии на которую мы будем очищать вот это вот текстовое поле, ну как бы будем просто очищать сам калькулятор. Вот. И теперь у нас, в принципе, дизайн для калькулятора готов. Вы можете, конечно, сказать, что здесь особо нет каких-то
85: Красивых стилей. Здесь это все выглядит пока ещё очень, очень плохо, но не спешите расстраиваться. Дело в том, что это всего лишь пока 2 урок. Уже в следующем уроке мы будем делать более красивый дизайн. Пока давайте просто рассмотрим как бы общую структуру, как это тут все вообще Функ
86: Функционирует, но уже потом будем вникать в какие-то более мелкие детали, как, например, там дизайн как добавление всяких там красивых фишек внутрь нашей программы и так далее. Пока рассматриваем просто общую концепцию. Ну и общая концепция здесь у нас следующая сейчас
87: Просто прописали весь необходимый дизайн. И теперь, после того, как мы прописали весь необходимый дизайн, нам необходимо добавить все необходимые функции. Единственное, прежде чем мы перейдём к функциям, давайте я текстовую надпись здесь просто удалю, ну или
88: Ну да, просто удалю эту текстовую надпись, ведь она нам изначально не нужна. А когда мы будем вводить, ну, когда мы будем нажимать на какие-то кнопки, то при нажатии на них мы уже будем сюда в текстовую текстовое поле что-либо вписывать, да, но пока нам это просто здесь не нужно.
89: И, кстати, ещё 1 момент. Я рекомендую вам сейчас опять же, остановить видео или по крайней мере, после видео просто немного поработать все-таки над дизайном, поработать именно с вкладкой свойства. То есть вот вы можете выбрать любой объект, текст блок или же батен и
90: Можете просто добавить внешний вид, например, вы можете указать там задний фон, вы можете указать формат шрифта и так дальше. И над этим всем. Я предлагаю вам немножечко хотя бы поработать самостоятельно. Конечно, в следующих уроках мы это тоже с вами все это будем проходить, но пока немного самостоятельной прак
91: Вам не помешает, поэтому можете уделить на это немного времени. Теперь давайте приступим к написанию функции. Для этого мы переходим в класс, который имеет расширение точка cc. И здесь, внутри конструктора, внутри конструктора класса мейн виндоу. Мы с ва
92: Вами в 1 очередь пропишем вот что мы обратимся к нашей основной сетке, то есть к сетке мейн рут. Мы вот здесь давали к ней для неё определённое название. Мы обратимся к этой сетке, возьмём из этой сетки полностью
93: Все кнопки и через цикл к каждой кнопке добавим определённый обработчик события. Ну и давайте сейчас такое как раз с вами и сделаем, чтобы нам такое сделать. Мы сперва давайте пропишем сразу цикл, то есть мы прописываем просто for each такой вот
94: Цикл здесь мы прописываем вот что мы будем создавать как бы переменную, будем создавать объект на основе такого класса, как ui элемент. И сам объект этот назовём, например, как элемент, то есть через именно через этот объект мы будем перебират
95: Все наши объекты, что находятся в определённой сетке. Дальше мы говорим, ну как бы, какой список мы перебираем, мы перебираем с вами список, это main рут, мейн рут, это ещё раз напомню, это вот эта вот наша сетка, вот я для неё указал здесь на
96: The main рут, и именно её мы как бы перебираем. То есть мы перебираем полностью все элементы, которые находятся внутри этой сетки. Ну и здесь я просто обращаюсь к main рут. И дальше мне ещё необходимо обратиться к children, чтобы просто получить все дочерние
97: Объекты. Далее открываем фигурные скобки. Ну и здесь будем прописывать необходимый код. Сперва нам необходимо прописать 1 небольшое условие. Нам необходимо проверить, относится ли этот дочерний объект к Такому классу, как батон. Поэтому
98: Здесь я прописываю вот это вот условие, является ли вот этот объект, является ли этот объект объектом на основе класса батон. Если это будет так, то, соответственно, к Такому объекту мы будем добавлять обработчик события, а ко всем
99: Остальным объектам, которые не созданы на основе класса button. To ко всем остальным таким объектам мы никакого обработчика события добавлять не будем. Иными словами, мы к текстовому полю никакого обработчика события не добавим. А вот к этим всем кнопкам мы как раз обработчики события и
100: Добавим это то, что мне и нужно было. И здесь я обращаюсь к каждой кнопке, обращаюсь к свойству клик и тем самым я смогу сюда повесить некий обработчик события. Ну и в качестве значения просто указываю тот метод, который у нас будет вызываться при
101: Нажатии на какую-либо кнопку сам этот метод, он пускай будет называться, например, как button click. Конечно, такого метода у меня пока что ещё нет, но в то же время сейчас мы его создадим также можно заметить, что сейчас это все подсвечивается красным и подсвечивается это все красным по той при
102: Причине, что у нас вот этот вот элемент это объект на основе такого класса как ui элемент поэтому нам вот здесь этот элемент, вот этот объект нужно преобразовать к Такому классу как батон ну и чтобы такое сделать, мы давайте с вами пропишем вот что во первых здесь все
103: Поставим круглые такие скобки. Вот, а дальше перед этим объектом мы просто скажем, что мы его преобразовываем к Такому классу, как батон. Ну и в таком случае, видите, вот здесь вот это красное подчёркивание, оно уже удалилось. Здесь у нас красное подчёркивание до сих пор есть, но
104: Но есть по той причине, что я ещё не создал сам метод батон клик, поэтому давайте, возможно, мы нажмём на быструю подсказку и здесь просто нажмём на создайте метод main window button click просто нажимаю на это все. И вот этот метод, он у меня здесь был создан.
105: Ну и, соответственно, отсюда вот эта вот ошибка, она тоже убралась. Смотрите, здесь нам действительно необходимо иметь 2 параметра. Эти параметры необходимо здесь принимать. Если мы хотим создать метод, который обрабатывает какое-либо нажатие, ну нажатие там на кнопку Нажа.
106: На текстовое поле или нажатие на какой-либо другой объект. Соответственно, эти 2 объекта, эти 2 параметра я здесь тоже принимаю. В то же время выбрасывать здесь ошибку я не собираюсь, поэтому вот этот кусочек кода я, пожалуй, отсюда просто удалю и здесь в 1 очередь мы давайте с вами
107: Создадим переменную на основе типа данных string. То есть это будет определённая строка. Давайте, возможно, назовём даже эту переменную, как стр, и внутрь этой переменной мы будем устанавливать тот текст, который будет на кнопке, которую нажал пользователь. Другими словами.
108: Если пользователь, например, нажмёт на единичку, на вот эту вот кнопку, то в таком случае мы будем с вами получать просто текст с этой кнопки. И этот текст будем устанавливать вот в эту переменную. Ну а чуть позже уже будем работать с этой переменной. Но пока давайте хотя бы такое реализуем, чтобы нам такое реализовать.
109: Нам необходимо обратиться к вот этому вот параметру, и, и это у нас, по сути, тот объект, на который мы с вами нажали. Вот дальше мы обращаемся здесь к original source и далее. Нам необходимо здесь как бы получить контент и чтобы нам полу,
110: Получить контент. Ну вот, чтобы получить контент, нам нужно просто здесь прописать точка и как бы вызвать сам этот метод контент, ну, вернее, значение контент. Но сейчас оно у нас вызываться не будет просто по той причине, что нам вот этот вот объект и также необхо
111: Необходимо преобразовать к классу, который, с которым мы как раз и работаем. Мы работаем с классом button. Вот. И теперь я наконец уже могу здесь обратиться к свойству контент. Ну и по факту, при помощи вот этого вот значения я получу именно надпись.
112: С самой кнопки сейчас можно заметить, что у нас все равно вызывается ошибка и ошибка вызывается по той причине, что нам необходимо вот это вот все дополнительно ещё преобразовать к типу данных строка. Поэтому здесь в начале я ещё прописываю стринг.
113: И теперь оно все у нас будет работать корректно, то бишь, то бишь мы берём объект, который идёт у нас на основе класса рауте ивент аркс. Дальше мы преобразовываем этот объект как бы к классу батон, то есть к кнопке дальше мы берём ориджинал сорс, то есть мы берём как б
114: Саму, сам по себе этот объект. И дальше мы просто получаем контент. То есть мы получаем ту надпись, которая находится на этом объекте, и это все преобразовываем к строке. Вот такая вот здесь получается запута, немного запутанная строчка кода. Следующее, что нам необходимо сделать
115: Так, это мы давайте обратимся к text label опять же напомню текст лейбл это у нас вот эта вот текстовая надпись вот она вот здесь у нас вверху было создано, мы к ней добавили именно название как текст label. Так вот, я просто обращаюсь к text label, обращаюсь к значению.
116: Текст и и если обратиться к значению текст, то можно установить какой-либо новый текст в саму эту текстовую надпись. И здесь если я просто укажу, например, равно стр, то в таком случае каждый раз, когда я буду нажимать на новую кнопку
117: У меня каждый раз предыдущее значение будет стираться и просто будет устанавливаться новое значение, которое было сейчас на кнопке. Это не совсем то, что я бы хотел. Я бы хотел, чтобы, например, если я нажал до этого на единичку, а потом на двойку, то уже к един.
118: Была бы добавлена ещё двойка, да и у нас получилось бы число 12, так вот, чтобы нам добавлять вот эти вот значения новые, то нам здесь не просто равно нужно указать, а plus равно стр. То есть мы как бы к текущему уже значе.
119: Добавляем ещё некое просто новое значение. Давайте даже на данный момент протестируем, что у нас получилось лучше, кстати, часто тестировать, чтобы понимать, на каком этапе у вас происходит какая-либо ошибка. Поэтому мы просто запускаем нашу программку. Вот так она сейчас
120: Выглядит достаточно неплохо и давайте попробуем что-либо здесь понажимать. Итак, чтобы я здесь не нажимал, у меня это значение. Оно вот сюда, в текстовую надпись как раз и выводится. Могу здесь нажать ещё на минус минус там 56. И так дальше оно все у нас будет здес.
121: Срабатывать абсолютно корректно. Ну, давайте, пожалуй, мы остановим нашу программку и продолжим просто написание кода. Теперь нам необходимо отслеживать, на какую кнопку нажал пользователь. Например, для начала мы давайте реализуем отслеживание на вот эту вот кнопку, то есть если
122: Пользователь нажмёт на кнопку ac, то в таком случае будем очищать просто текстовое поле, чтобы нам такое реализовать. Мы вот здесь чуть выше должны прописать 1 небольшую проверку в этой проверке. Я делаю следующее. Мы проверяем, если текст на
123: Кнопки он равен значению эйси, то в таком случае я знаю, что пользователь нажал на вот эту вот кнопку. Ну и мне необходимо сделать следующее. Я просто обращаюсь к text. Label. Я обращаюсь к свойству text и устанавливаю здесь просто пустую строку. Также тут стоит нам ещё
124: Описать значение, вернее оператор else. Вот. И по факту мы уже реализовали сами по себе вот эту вот кнопку ac, то бишь если пользователь нажимает на кнопку ac, тогда мы очищаем текстовое поле, если он нажимает на какую-либо другую кнопку.
125: То в таком случае мы берём текст из этой кнопки и этот текст мы просто встраиваем вот сюда. Окей, это у нас готово. Теперь мы давайте реализуем ещё вот эту вот кнопочку, чтобы её реализовать, нам необходимо дописать ещё 1 здесь оператор. Мы здесь. Давайте
126: Напишем элс иф, и здесь мы пропишем следующее. Мы обращаемся к стр. То есть мы, мы проверяем, что написано на кнопке, и если на кнопке будет написан знак равенства, то в таком случае нам необходимо выполнить само математическое действие, выполнять мате.
127: Математическое действие, мы будем с вами достаточно хитрым, и чтобы хитро выполнить математическое действие, нужно подключить 1 дополнительную библиотеку. Она называется как систем точка дейта. Поэтому давайте вот здесь, вверху, мы её и подключим. Теперь же мы
128: Переходим обратно к нашему условию и здесь нам необходимо сделать вот что мы давайте с вами создадим некую некую переменную. Пускай она будет называться как у нас стринг. Ну, пускай у неё тип данных будет как string и называться она у нас пускай будет как велью и
129: Внутрь неё мы помещаем следующее мы создаём объект на основе такого класса, как data, table. Далее мы сразу же обращаемся к методу, который называется как компьют этот метод. Он позволяет нам вы
130: Читать какую-либо математическую операцию, причём в качестве параметра мы можем передавать просто строку. Это как раз то, что нам и нужно. То есть, предположим, пользователь введёт там, например, 12 - 10 * 5. И это просто у нас будет определённая строка.
131: И мы сможем эту строку спокойно с вами высчитать при помощи как раз метода компьют и что здесь необходимо сделать. Здесь нам необходимо просто обратиться к text. Label, обратиться к свойству text. То есть нам нужно получить как бы саму эту строку, саму по себе.
132: Вот здесь ещё можно установить фильтр, но нам никакой фильтр не нужен, поэтому я здесь указываю значение как null, и в конце это все ещё необходимо преобразовать к формату строки, поэтому в конце ееще используем метод to string, ну и теперь все, что остаётся сделать, так это мы просто обращаемся к
133: Label точка текст. И здесь мы устанавливаем новое значение в качестве значений я устанавливаю значение вот этой вот переменной велью по факту все готово, ну и давайте запустим и просто протестируем итак, программка у нас открылась, давайте введём.
134: Да, какие-либо значения, например, 12 - 6. И пускай ещё + 3 будет. Ну и нажимаем просто на равно после этого у нас получается 9, что вполне логично. Ведь 12 - 6 это 6 было, + 3. У нас получилось как раз значение 9.
135: Давайте нажмём на ac, замечаем что все у нас полностью очистилось давайте попробуем ещё что-то например 5 мы умножим на 2, у нас получится уже 10 и потом мы это все поделим ну к примеру давайте тоже на 2 для примера нажимаем
136: Равно и у нас опять же получается число 5 все работает корректно. Таким образом теперь я могу создавать абсолютно любые математические операции, могу это все там умножать, потом это все ещё могу там делить и нажимать просто на равно и у нас будет получаться будут получаться
137: Какие-либо действия, все теперь обрабатывается корректно. Таким образом мы с вами создали нашу 1 программку на основе платформы впф. Эта программка вполне хорошая, да, здесь ещё нету особого какого-то графического дизайна, но это мы уже будем делать.
138: Следующих уроках будем уже создавать более менее красивый дизайн. Ну и добавлять к этому всему функции. На этом же у меня пока все. Так что увидимся с вами в следующих уроках до