с# лабораторная. Задание2. Private void button4 Click(object sender, EventArgs e)
Скачать 383.03 Kb.
|
На этом уроке создадим браузер для просмотра интернет страниц. Для этого создадим новый проект и расставим объекты так, как показано на рисунке: В свойствах объекта comboBox1 выберем свойство Items и нажав кнопку "Collection", введём несколько строк - адресов популярных WEB сайтов. Двойным щелчком на кнопке button4 ("Перейти") создадим событие для открытия веб страницы: private void button4_Click(object sender, EventArgs e) { webBrowser1.Navigate("http://" + comboBox1.Text); } Адрес веб страницы записывается в строку ввода comboBox1 и имеет свойство Text. Этот текст, в виде адреса вводится пользователем. Для того, что бы пользователь не набирал лишний раз http:// мы к этой строке прибавляем текст из comboBox1. Попробуем запустить наш браузер на исполнение и введём в строку ввода например, rambler.ru и нажмём кнопку "Перейти". Затем, выберем из выпадающего списка, например mail.ru и опять нажмём кнопку "Перейти" Браузер работает, но возникает одно неудобство - всё время, при вводе интернет адреса приходится нажимать кнопку "Перейти". Создадим такое событие что бы при нажатии клавиши "Enter" в строке ввода происходило событие аналогичное кнопке "Перейти". Для этого выделим comboBox1 и в закладке событий (Events) найдём событие KeyPress. Двойным щелчком создадим событие и допишем нужные строки: private void comboBox1_KeyPress(object sender, KeyPressEventArgs e) { // Проверяем нажата ли клавиша Enter (код 13). Аргумент е - код нажатой клавиши if (e.KeyChar.Equals((char)13)) { // Если Enter нажат, то вызываем событие нажатия на кнопку "Перейти" button4_Click(sender,e); } } Теперь, запустив наш браузер и введя адрес сайта, для перехода можно нажимать "Enter". Осталось задействовать кнопки "<" - вернуться, ">" - вперёд и "0" - обновить. Создадим последовательно события для этих кнопок: // Вернуться назад private void button1_Click(object sender, EventArgs e) { webBrowser1.GoBack(); } // Перейти вперёд private void button2_Click(object sender, EventArgs e) { webBrowser1.GoForward(); } // Обновить данные в браузере private void button3_Click(object sender, EventArgs e) { webBrowser1.Refresh(); } Теперь браузер работает как полноценное приложение. оздаём панель закладок. Для создания панели закладок, добавим на браузере ещё одну кнопку "Закладки" (button5) и панель (panel1). На панели расставим объекты, как показано на рисунке. Свойство visible панели следует установить в false (панель не будет отображаться при старте программы). Для хранения закладок создадим на диске файл с любым именем, например C:\browser.ini Изначально, файл будет пустым. В него следует (открыв в блокноте) записать цифру 0, эта цифра, в дальнейшем будет указывать на число строк в файле. Файл следует сохранить как ... в кодировке UTF-8. В нашей программе, для работы с файлами, следует в начале программы добавить директиву: using System.IO; Для кнопки button5 "Закладки" (двойным щелчком) создадим событие: private void button5_Click(object sender, EventArgs e) { panel1.Visible = true; button5.Visible = false; textBox2.Text = comboBox1.Text; // Очищаем список от содержимого listBox1.Items.Clear(); // Создаём переменную reader для чтения из файла browser.ini using (StreamReader reader = new StreamReader("C:\\browser.ini")) { // Считываем первую строку чтобы получить число строк в списке string z = reader.ReadLine(); //В цикле считываем остальные строки из файла for (int j = 0; j < Convert.ToDouble(z); j++) listBox1.Items.Add(reader.ReadLine()); } } Создадим ещё одно событие на кнопку закрытия панели закладок: //Закрыть панель закладок private void button8_Click(object sender, EventArgs e) { panel1.Visible = false; button5.Visible = true; } Запустим программу и убедимся, что панель закладок нормально открывается (кнопка ''Закладки'' пропадает), а при закрытии панели - появляется. Создадим событие на кнопку "Добавить", так что бы имя и адрес сайта добавлялись в список. Сразу же сохраняем полученный новый список в файле. //Добавить адрес в список listBox1 private void button6_Click(object sender, EventArgs e) { //Добавляем в список адрес и комментарий //Символ вертикальная черта будет в последующем использоваться //как разделитель комментария и адреса сайта listBox1.Items.Add(textBox1.Text + "|" + textBox2.Text); // Создаём переменную sw для записи данных в поток (файл) using (StreamWriter sw = new StreamWriter("C:\\browser.ini")) { // Первой строкой записываем в файл число строк в нашем списке sw.WriteLine(listBox1.Items.Count.ToString()); // В цикле записываем все строки в файл. // Count - число строк в списке for (int j = 0; j < listBox1.Items.Count; j++) sw.WriteLine(listBox1.Items[j]); } } Запустим наше приложение и добавим несколько адресов в список закладок. Закроем панель закладок, а затем откроем вновь, чтобы убедиться, что добавленные закладки сохранились в файле. Далее, создадим событие двойного щелчка на выбранной строке списка закладок. Из строки выделим адрес сайта и поместим адрес в адресную строку. //Двойной щелчок на списке private void listBox1_MouseDoubleClick(object sender, MouseEventArgs e) { string str = listBox1.SelectedItem.ToString(); string newstr = ""; int flag = 0; //flag определяет разделитель | char c; int k = str.Length; //Выделяем из строки адрес сайта for (int j = 0; j < k; j++) { c = str[j]; if (flag != 0) newstr += c; if (c == '|') flag = 1; } //Подставляем в адресную строку адрес сайта comboBox1.Text = newstr; } } Запустим программу и убедимся, что при двойном щелчке на списке закладок, адрес выбранного сайта помещается в адресную строку. И, наконец, создадим событие для кнопки "Удалить закладку". //Удаление ненужной строки (закладки) private void button7_Click(object sender, EventArgs e) { // Проверяем, есть ли в списке выделенная строка if (listBox1.SelectedIndex == -1) // Если нет, то выводим сообщение. MessageBox.Show("Нет выделенной строки"); else // Иначе .. Удаляем выделенную строку listBox1.Items.RemoveAt(listBox1.SelectedIndex); //Сохраняем новый список в файле using (StreamWriter sw = new StreamWriter("C:\\browser.ini")) { sw.WriteLine(listBox1.Items.Count.ToString()); for (int j = 0; j < listBox1.Items.Count; j++) sw.WriteLine(listBox1.Items[j]); } } |