Свойства и события объектов comboBox и webBrowser
События от клавиатуры.
Создадим браузер для просмотра интернет страниц. Для этого создадим новый проект и расставим объекты так, как показано на рисунке: Panel, 4кнопки Button, label, ComboBox, WebBrowser.
- свойствах объекта 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 (панель не будет отображаться при старте программы).
Для хранения закладок создадим файл с именем browser.txt ( в папке Debug вашего проекта)
Изначально, файл будет пустым. В него следует (открыв в блокноте) записать цифру 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("browser.txt"))
{
- Считываем первую строку чтобы получить число строк в списке
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("browser.txt "))
{
- Первой строкой записываем в файл число строк в нашем списке 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("browser.txt"))
{
sw.WriteLine(listBox1.Items.Count.ToString());
for (int j = 0; j < listBox1.Items.Count; j++) sw.WriteLine(listBox1.Items[j]);
}
}
Задание.
Отработать предложенный проект.
На форму проекта добавить фамилию, имя автора проекта. Прислать на эл. почту преподавателя заархивированный файл с проектом.