# 000149. Кнопки, Текст-боксы и метки

Кнопки, Текст-боксы и метки||wmysterio|wmysterio|<wmysterio@yandex.ru>|/||Всем хай! Мы продолжаем изучать формы Windows, и сегодня мы ознакомимся ещё с двумя элементами, как кнопки и метками.\
\
Начнём с кнопок. Они находятся в категории "Стандартные элементы управления". Перетащим её на нашу форму:\
[![](https://github.com/wmysterio/scm-scripting-lessons/blob/main/_pu/2/s73365337.jpg)](https://github.com/wmysterio/scm-scripting-lessons/blob/main/_pu/2/73365337.png)\
Давайте изменим внешне нашу кнопку, добавив изображение на неё. Оставим пустое поле в свойстве кнопки "Text", что бы он не мешал нам. Я подготовил специальный флаг, который вот: (выложил, что бы вы могли его скачать если вдруг надумаете повторять те действия, которые в данный момент делаю я)\
![](https://github.com/wmysterio/scm-scripting-lessons/blob/main/_pu/2/68930594.png)\
Теперь делаем следующее в свойствах кнопки:\
1\) Находим свойство "Image", и нажимаем на "...".\
2\) Перед нами появится окно выбора ресурса. Нажимаем на кнопку "Импорт":\
[![](https://github.com/wmysterio/scm-scripting-lessons/blob/main/_pu/2/s00061105.jpg)](https://github.com/wmysterio/scm-scripting-lessons/blob/main/_pu/2/00061105.png)\
И указываем картинку, которую хотим добавить.\
3\) После загрузки в ресурсы картинки, выбираем её, и нажимаем "ОК":\
[![](https://github.com/wmysterio/scm-scripting-lessons/blob/main/_pu/2/s22199530.jpg)](https://github.com/wmysterio/scm-scripting-lessons/blob/main/_pu/2/22199530.png)\
\
Теперь на нашей кнопке появился этот рисунок. Чтобы он нормально отображался на форме, изменим размер кнопки на 34х34:\
![](https://github.com/wmysterio/scm-scripting-lessons/blob/main/_pu/2/70475274.png)\
Переместим нашу кнопку в правый верхних угол и зададим ей свойство "Anchor" на это:\
![](https://github.com/wmysterio/scm-scripting-lessons/blob/main/_pu/2/76188703.png)\
А также это же свойство для текстового поля:\
![](https://github.com/wmysterio/scm-scripting-lessons/blob/main/_pu/2/73454444.png)\
Таким образом элементы формы будут изменятся от размера самой формы. На конец, переместим наши элементы в более удобную композицию, оставив немного пустого места внизу, для нашей метки:\
[![](https://github.com/wmysterio/scm-scripting-lessons/blob/main/_pu/2/s81121380.jpg)](https://github.com/wmysterio/scm-scripting-lessons/blob/main/_pu/2/81121380.png)\
Теперь программа очень напоминает  обычный браузер, только упрощенный. Сами-по-себе кнопка и поле бесполезные, так как не выполняют никаких действий. Наша задача - заставить кнопку переходить на сайт, который пользователь введёт в текстовое поле. Для этого выделим нашу кнопку и зайдём в её свойства. Найдите там "События"(иконка молнии):\
![](https://github.com/wmysterio/scm-scripting-lessons/blob/main/_pu/2/99596947.png)\
и найдите там поле "Click", поле чего нажмите 2 раза ЛКМ на пустом поле возле него:\
![](https://github.com/wmysterio/scm-scripting-lessons/blob/main/_pu/2/97335681.png)\
Компилятор сформирует нам обработчик события, в котором мы должны прописать переход на сайт:\
[![](https://github.com/wmysterio/scm-scripting-lessons/blob/main/_pu/2/s57348228.jpg)](https://github.com/wmysterio/scm-scripting-lessons/blob/main/_pu/2/57348228.png)\
В нём мы должны прописать следующий код:

| <p>webBrowser1.Url = new Uri( textBox1.Text );<br></p> |
| ------------------------------------------------------ |

Действует это так:\
1\) Получаем ссылку с помощью конструктора **new Uri**, в параметр которого строковый адрес web-ресурса. В место строки мы указываем текст "Тестового поля" и создаём новый объект - Веб-ссылка. Общая схема такова:\
[![](https://github.com/wmysterio/scm-scripting-lessons/blob/main/_pu/2/s80016752.jpg)](https://github.com/wmysterio/scm-scripting-lessons/blob/main/_pu/2/80016752.png)\
Но здесь нужно быть осторожным, так как ссылка имеет строгий формат(как и обычная web-ссылка). Она должна содержать протокол http или подобные, должна содержать латинские символы. Что-бы избежать ошибок, типа "Недопустимый URI: Невозможно определить формат URI." кинем наш код блок **try**:<br>

| <p>try {<br>     webBrowser1.Url = new Uri( textBox1.Text );<br>} catch { return; }<br></p> |
| ------------------------------------------------------------------------------------------- |

Таким образом мы обезопасили себя от нестабильной работы. Однако нужно сообщать пользователю о неверном формате, иначе он будет в недоумении от того, почему браузер не переходит по заданной ссылке.\
\
Есть два способа этого сделать:\
1\) Через статичный класс **MessageBox**. В блоке catch в место return нужно написать:<br>

| <p>} catch {<br>     MessageBox.Show("Неправильный адрес WEB-ссылки");<br>}<br></p> |
| ----------------------------------------------------------------------------------- |

\
[![](https://github.com/wmysterio/scm-scripting-lessons/blob/main/_pu/2/s07881039.jpg)](https://github.com/wmysterio/scm-scripting-lessons/blob/main/_pu/2/07881039.png)\
Этот способ самый используемый, но я предлагаю вам сделать вывод сообщения по-другому. С помощью меток, заодно и изучим их.\
\
Найдём в панели инструментов объект **Label**:\
![](https://github.com/wmysterio/scm-scripting-lessons/blob/main/_pu/2/59518869.png)\
И переместим его мышью в нижнюю часть макета программы:\
![](https://github.com/wmysterio/scm-scripting-lessons/blob/main/_pu/2/52482416.png)\
Оставим свойство этого Лейбла пустым. А затем в исключении напишем следующий код:

| <p>        private void button1\_Click( object sender, EventArgs e ) {<br>            try {<br>                webBrowser1.Url = new Uri( textBox1.Text );<br>                label1.Text = "";<br>            } catch {<br>                label1.Text = "Неверное имя ссылки!";<br>            }<br>        }<br></p> |
| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

Если срабатывает исключение, то мы задаём имя программно для нашей метки. Если всё ввели правильно, то текст метки опять делается пустым. Графически этот процесс можно изобразить так:\
[![](https://github.com/wmysterio/scm-scripting-lessons/blob/main/_pu/2/s88734570.jpg)](https://github.com/wmysterio/scm-scripting-lessons/blob/main/_pu/2/88734570.png)\
Программа ожидает событие "Клик" а затем проверяет текстовое поле на наличие ошибок. Если такие соблюдаются, то идёт обработка исключения с указанием причины путём заполнения текстом метки и идёт прыжок на ожидания события клик. Если ссылка правильная, то текст метки очищается, идёт переход браузера по ссылке и возврат на ожидание  события "Клик".\
\
Надеюсь, с этим вопросов не возникнет. На этом всё, жду вас в следующих уроках по c# :)\
|1201|1|0|73365337`png`600`152`400`101\|68930594`png`32`32|00061105`png`574`388`400`270\|22199530`png`570`388`400`272|70475274`png`175`119\|76188703`png`259`113|73454444`png`260`114\|81121380`png`600`458`400`305|99596947`png`287`141\|97335681`png`284`60|57348228`png`500`116`400`92\|80016752`png`600`158`400`105|07881039`png`600`447`400`298\|59518869`png`123`34|52482416`png`163`99\|88734570`png`498`376`399`302||knopki\_tekst\_baksy\_i\_metki|1392798426
