На этот раз мы создадим довольно простой онлайн конвертер валют на C#, используя интернет перевод валют от поисковика Google.
Форма у нас вот такая:
Здесь у нас 3 TextBox’a, 5 Label’ов, 2 ListBox’a, 1 Button в верхней части формы. Кроме того, в нижней части у нас имеется Panel, а также мы добавили WebBrowser. При этом размер WebBrowser’a надо подогнать в форме до определенной степени, о которой будет рассказано ниже.
Всё дело в том, что в данной программе мы будем отправлять запрос в поисковик Google на перевод одной валюты в другую. Так же, как мы это делаем вручную в браузере, но производиться это будет автоматически.
Пример подобного запроса в браузере:
Но нам в программе понадобится лишь вот эта часть:
Именно она должна будет попадать в область Panel, а то, что находится выше и ниже её на странице поисковика, надо как бы скрыть за формой.
Область нашего WebBrowser’a, как видно на рисунке ниже, выходит даже за пределы формы (она обозначена пунктиром).
Регулировать положение WebBrowser’a надо будет до тех пор, пока при запросе (после создания основной части программы) в Panel не будут получаться примерно такие виды, чтобы не было верха и не было низа от поисковика:
В начале создания программы можно подогнать область на глазок.
Кроме того, в свойствах мы отключили полосы прокрутки (скроллбары), чтобы пользователь не мог «листать» содержимое нашего WebBrowser’a вверх и вниз:
Далее, в первом TextBox’e, обозначаемом количеством переводимой валюты, мы заменили свойство Text, вписали туда цифру «1».
При запуске программы у нас в нём автоматически будет стоять единица для удобства пользователя, чтобы он лишний раз не заполнял эту графу, если ему захочется узнать цену одной единицы валюты относительно другой. Он также, конечно, сможет вбивать туда и свои цифры.
В оба ListBox’a мы заносим названия валют. Для этого мы нажимаем на стрелочку в правом углу ListBox’a и в появившейся панели нажимаем «Изменить элементы…»
В появившемся окне с новой строки вбиваем буквенное обозначение валют:
При выборе пользователем любого из них в первом и втором ListBox’e, после нажатия кнопки «Перевести» произойдёт перевод из первой выбранной валюты во вторую.
Все остальные Textbox’ы мы оставляем пустыми(они нужны для того, чтобы пользователь смог переводить также валюты, которых нет в ListBox’ах), а у Label’ов и Button’a меняем лишь Text в свойствах.
Внешняя оболочка готова. Теперь приступаем к коду. Щёлкаем по Button’у дважды и переносимся в тело кода. Для начала поднимемся чуть выше в тело под наименованием public Form1(). Внутри него мы напишем следующее:
1 2 3 4 5 6 |
public Form1() { InitializeComponent(); listBox1.SelectedIndex = 0; listBox2.SelectedIndex = 1; } |
Этими двумя строками мы убили сразу двух зайцев. Во-первых, теперь мы избежим ошибки программы, когда ни в ListBox’ах, ни в Textbox’ах не будет ничего, так как теперь по-любому в ListBox’ах что-то будет выбрано. А во-вторых, мы облегчаем пользование программой человеку, если он решил выполнить перевод из рублей в доллары (а чаще всего так и бывает). Под индексом «0» у нас в ListBox’е записано первое значение «RUB», под индексом «1» — второе значение «USD».
При запуске программы вид у неё будет вот такой:
Далее уже в теле кода private void button1_Click(object sender, EventArgs e) мы создаём две переменные типа string:
1 |
string from, to; |
В них будут записываться обозначения валют. from — из какой переводить, to — в какую переводить.
Далее мы создадим первое условие:
1 2 3 4 5 6 7 8 |
if(textBox2.Text=="") { from = listBox1.SelectedItem.ToString(); } else { from = textBox2.Text; } |
В нём говорится, что если второй Textbox пуст (в который пользователь может вписать любую другую валюту, которой нет по умолчанию), то мы заносим в переменную from значение из первого ListBox’а (например, при выборе рубля в переменной from будет записано «RUB»). Иначе мы записываем в эту переменную то значение, которое имеется в Textbox’e. Если пользователь напишет в нём, например, «CZK» (чешская крона), то и в переменную будет вписано то же самое.
Подобное же условие мы создадим для переменной to, но ей «подчиняются» другие Textbox и ListBox:
1 2 3 4 5 6 7 8 |
if (textBox3.Text == "") { to = listBox2.SelectedItem.ToString(); } else { to = textBox3.Text; } |
Далее мы создаём ещё одно, более обширное условие. Первые его две части позволяют избежать некоторых ошибок в программе:
1 2 3 4 5 6 7 8 |
if(from==to) { MessageBox.Show("Это одна и та же валюта. Перевод невозможен!", "Внимание!"); } else if(textBox1.Text=="") { MessageBox.Show("Введите количество валюты для перевода!", "Внимание!"); } |
В первом случае мы предупреждаем пользователя всплывающим MessageBox’ом, что нельзя переводить одну и ту же валюту.На практике это выглядит вот так:
Во втором случае, если пользователь не ввёл количество переводимой валюты, мы просим его заполнить соответствующее поле:
Однако, наше условие ещё не окончено. При if должен быть и else. И вот это else является, пожалуй, самой главной частью программы, хоть и записана она в одну строчку, а именно:
1 2 3 4 |
else { webBrowser1.Navigate("https://www.google.ru/search?q=" + textBox1.Text + " " + from + " %D0%B2 " + to); } |
В ней мы отправляем запрос на перевод валюты в Google. Метод webBrowser1.Navigate загружает ссылку, записанную в скобках, в WebBrowser. Самое сложное здесь — не запутаться в этой самой ссылке. Для начала мы в кавычках пишем ссылку, с которой начинается любой поиск в Google: https://www.google.ru/search?q=. После знака равно всегда идёт то, что ищется в поисковике. Для начала мы записываем число из первого TextBox’a, затем в кавычках ставим пробел, после вписываем переменную from, в которой хранится буквенное обозначение исходной валюты. Следующие непонятные символы в кавычках (заметьте, перед ними и после них тоже стоят пробелы) — это всего-лишь буква «в» в русской раскладке, но записанная в несколько необычной для нас манере, так как поисковые адреса могут работать только с латинскими буквами. После этого записывается переменная to, в которой содержится обозначение валюты для перевода.
Сначала можно даже не понять, что это за запись такая, но если немного разобраться, то всё встанет на свои места.
Например, мы хотим узнать, сколько будет в 1000 рублях евро. В Textbox1 тогда мы пишем 1000, затем в первом ListBox’e мы выбрали строку RUB, а во втором — EUR, и нажимаем кнопку «Перевести».
Что же за запрос приходит в Google? Давайте разберем подробно.
Итак, первая часть в кавычках, как мы говорили ранее, просто говорит поисковику, что то, что идёт дальше в строке — это запрос на поиск. Далее в запрос записывается значение из Textbox1.Там написано «1000», затем идёт пробел («1000 «), после записывается обозначение первой валюты («1000 RUB«), потом идут пробелы с символами, которые при раскодировании в поисковике станут буквой «в» («1000 RUB в «), а после — второе обозначение валюты. Итого у нас получился запрос: «1000 RUB в EUR». Точно такой же мы можем вбить в поисковике в обычном браузере, и эта же ссылка выйдет в адресной строке. Вот и весь фокус.
Программа же нам выдаст:
Также мы не показали, как работают последние два TextBox’a. Посмотрим на работу программы на примере перевода японских йен в литовские литы:
Как видно из примера, хоть в ListBox’e и выбраны значения, но по нашим первым двух условиям, мы поставили приоритет TextBox’ов выше, чем у ListBox’а. Как только из TextBox’ов будет всё удалено, программа опять начнёт работать с ListBox’ами.
Итак, мы создали конвертер валют на C#. Исходный код можно скачать ниже. Если есть вопросы или предложения, можно оставить их в комментариях, администрация ответит на всё.
Скачать исходник
Поделиться в соц. сетях: