# 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


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://lessons.sannybuilder.com/00300/00100/000149.-knopki-tekst-boksy-i-metki.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
