Windows приложения. Компоненты формы. Многооконные приложения

Содержание

Слайд 2

Многооконные приложения Windows приложения, как правило, состоят из нескольких взаимодействующих между

Многооконные приложения

Windows приложения, как правило, состоят из нескольких взаимодействующих между собой

окон. В этом разделе мы познакомимся с техникой создания многооконных приложений в Window Forms.
Для того, чтобы добавить в проект форму, нужно войти в меню Проект и выбрать пункт Добавить форму. В выпадающем списке выбрать пункт Форма. После этого в проекте появляется новая форма.
Слайд 3

Многооконные приложения Предположим, теперь у нас две формы. Но пока они

Многооконные приложения

Предположим, теперь у нас две формы. Но пока они никак

не взаимодействуют и ничего друг про друга не знают. Объявим в коде первой формы вторую форму и дадим ей имя:
public partial class Form1 : Form
{
public Form2 frm2; //Объявляем Form2 и даем ей имя frm2 
Так же поступаем со второй формой:
public partial class Form2 : Form
{
public Form1 frm1; //Объявляем Form1 и даем ей имя frm1
Слайд 4

Многооконные приложения Положим на обе формы кнопку (button) и метку (label).

Многооконные приложения

Положим на обе формы кнопку (button) и метку (label).
По

нашему замыслу мы нажатием кнопки в первой форме будем менять текст в метке второй формы и наоборот. Чтобы это стало возможным, мы должны у обеих меток установить свойство Modifiers public (по умолчанию – private).
Дальнейшие действия представлены в обработчиках кнопок первой и второй формы и комментариях к ним.

// Первая форма:  
private void button1_Click(object sender, EventArgs e)
{
frm2 = new Form2();//Создаем указатель на форму2
frm2.frm1 = this;//Передаем форме2 указатель на форму1
frm2.BackColor = Color.Cyan;//Меняем цвет формы2
frm2.Show();//Показываем форму2
frm2.label1.Text = "Привет";//Меняем текст
this.Hide();//Прячем форму1
}

// Вторая форма: 
private void button1_Click(object sender, EventArgs e)
{ frm1 = new Form1();
frm1.label1.Text = "Ответ";
this.Hide();//Прячем форму2
frm1.Show();//Показывем форму1
}

Слайд 5

Многооконные приложения Важно: в определении функций и переменных, к которым мы

Многооконные приложения

Важно: в определении функций и переменных, к которым мы хотим

получить доступ, должен присутствовать модификатор доступа public, а для элементов управления свойство Modifiers должно быть установлено в Public.

На рисунке показаны первая форма, вторая форма и первая форма после взаимодействия со второй.

Слайд 6

Контейнеры в Windows Forms. Контейнер GroupBox Назначение контейнера понятно из его

Контейнеры в Windows Forms. Контейнер GroupBox

Назначение контейнера понятно из его названия

– хранение и группировка компонентов формы.
GroupBox представляет собой специальный контейнер, который ограничен от остальной формы границей. Он имеет заголовок, который устанавливается через свойство Text. Нередко этот элемент используется для группирования переключателей - элементов RadioButton, так как позволяет разграничить их группы
Слайд 7

Контейнеры в Windows Forms. Контейнер Panel Компонент Panel представляет собой контейнер

Контейнеры в Windows Forms. Контейнер Panel

Компонент Panel представляет собой контейнер для

других компонентов и позволяет легко управлять компонентами, которые находятся на панели. Свойства компонента Panel приведены в таблице:
Слайд 8

Переключатель CheckBox Переключатели в некотором смысле являются визуальными аналогами операторов if

Переключатель CheckBox

Переключатели в некотором смысле являются визуальными аналогами операторов if и

switch.
Компонент CheckBox представляет собой переключатель, который может находиться в одном из двух состояний: выбранном или невыбранном.
Приведем пример. В представленном на рисунке окне вы видите два переключателя, один из которых выбран. Кнопка меняет выбор переключателя и отображает текст выбранного переключателя в Label. Флажки помещены в контейнер GroupBox.
Слайд 9

Свойства компонента CheckBox.

Свойства компонента CheckBox.

Слайд 10

Свойства компонента CheckBox. Продолжение.

Свойства компонента CheckBox. Продолжение.

Слайд 11

Переключатель CheckBox public Form1() { InitializeComponent(); } private void button1_Click(object sender,

Переключатель CheckBox

public Form1()
{
InitializeComponent();
}
  private void button1_Click(object sender, EventArgs

e)
{
if (checkBox1.Checked)
{ label1.Text = checkBox1.Text;
checkBox1.Checked = false;
checkBox2.Checked = true;
}
else
{
label1.Text = checkBox2.Text;
checkBox2.Checked = false;
checkBox1.Checked = true;
}
}
Слайд 12

Переключатель RadioButton Радиокнопка это зависимый переключатель, это означает, что из нескольких

Переключатель RadioButton

Радиокнопка это зависимый переключатель, это означает, что из нескольких радиокнопок

во включенном состоянии может находиться только одна кнопка. Радиокнопки, помещенные в контейнер работают, как группа зависимых переключателей, т.е. во включенном состоянии может находиться только одна кнопка. Контейнером для радиокнопок может служить форма, элементы GroupBox и Panel. Основные свойства RadioButton идентичны свойствам CheckBox, и вы можете видеть их в таблице свойств CheckBox.
На рисунке представлена форма с тремя переключателями RadioButton. В зависимости от их выбора, кнопка переключает цвет метки.
Слайд 13

Переключатель RadioButton public partial class Form1 : Form { public Form1()

Переключатель RadioButton

public partial class Form1 : Form
{
public Form1()
{

InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
if (radioButton1.Checked) label1.BackColor = Color.Red;
if (radioButton2.Checked) label1.BackColor = Color.Blue;
if (radioButton3.Checked) label1.BackColor = Color.Green;
}
}
Слайд 14

Окно сообщений MessageBox Как правило, для вывода сообщений применяется элемент MessageBox.

Окно сообщений MessageBox

Как правило, для вывода сообщений применяется элемент MessageBox. Однако

кроме вывода строки сообщения данный элемент может устанавливать ряд настроек, которые определяют его поведение. Для вывода сообщения в классе MessageBox предусмотрен метод Show, который имеет различные версии и может принимать ряд параметров. Упрощенный синтаксис этого метода приведен ниже: 
Show(<текст в окне>[,<заголовок окна>,<набор кнопок>,<иконка>,
<выбранная по умолчанию кнопка >])
Рассмотрим более подробно параметры метода Show. Все параметры, кроме первого, являются необязательными. Первый и второй параметры метода строкового типа. Остальные параметры с помощью набора констант задают кнопки, иконки в окне и кнопку по умолчанию.
Слайд 15

Окно сообщений MessageBox Тип MessageBoxButtons задает набор кнопок в окне. Набор

Окно сообщений MessageBox

Тип MessageBoxButtons задает набор кнопок в окне.
Набор констант

типа MessageBoxButtons, приведен в таблице:
Слайд 16

Окно сообщений MessageBox Тип MessageBoxIcon задает иконку в окне. Набор констант типа MessageBoxIcon, приведен в таблице:

Окно сообщений MessageBox

Тип MessageBoxIcon задает иконку в окне. Набор констант типа

MessageBoxIcon, приведен в таблице:
Слайд 17

Окно сообщений MessageBox Перечисление MessageBoxDefaultButton определяет кнопку, выбранную по умолчанию. В

Окно сообщений MessageBox

Перечисление MessageBoxDefaultButton определяет кнопку, выбранную по умолчанию. В таблице

приведены члены перечисления:

Метод Show возвращает значение типа DialogResult, который предоставляет набор констант, сигнализирующих какая из кнопок выбрана пользователем:

Слайд 18

Примеры использования класса MessageBox. 1. Выдача сообщения в окне. MessageBox.Show("Текст", "Заголовок

Примеры использования класса MessageBox.

1. Выдача сообщения в окне.
MessageBox.Show("Текст", "Заголовок окна");
2. Использование

иконки в окне:
MessageBox.Show("Hello!", "Окно ввода", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
Слайд 19

Примеры использования класса MessageBox. 3. Использование нескольких кнопок // удалить текущий

Примеры использования класса MessageBox.

3. Использование нескольких кнопок // удалить текущий элемент
if (MessageBox.Show("Вы

уверены?", "Вопрос",
MessageBoxButtons.OKCancel, MessageBoxIcon.Question) = =
DialogResult.OK) listBox1.Items.RemoveAt(listBox1.SelectedItem);
Слайд 20

Примеры использования класса MessageBox. 4. Кнопка «Отмена», выбранная по умолчанию: if

Примеры использования класса MessageBox.

4. Кнопка «Отмена», выбранная по умолчанию:
if (MessageBox.Show("Вы уверены?",

"Вопрос",
MessageBoxButtons.OKCancel, MessageBoxIcon.Question,
MessageBoxDefaultButton.Button2) == DialogResult.OK)
{
MessageBox.Show("ok");
}
Слайд 21

Диалоги открытия и сохранения файлов Окна открытия и сохранения файла представлены

Диалоги открытия и сохранения файлов

Окна открытия и сохранения файла представлены классами

OpenFileDialog и SaveFileDialog. Элемент OpenFileDialog находится на вкладке «Диалоговые окна» панели инструментов и позволяет для выбора использовать стандартный Windows-диалог. Этот компонент является «невидимым». Его вызов осуществляется программным путем.
Слайд 22

Диалоги открытия и сохранения файлов Элемент SaveFileDialog можно найти на вкладке

Диалоги открытия и сохранения файлов

Элемент SaveFileDialog можно найти на вкладке «Диалоговые

окна». OpenFileDialog и SaveFileDialog имеют ряд общих свойств. Они приведены в таблице на предыдущем слайде. В следующей таблице приведены свойства, специфические для SaveFileDialog:
Слайд 23

Пример чтения из файла в Textbox с использованием OpenFileDialog. private void

Пример чтения из файла в Textbox с использованием OpenFileDialog.

private void button1_Click(object

sender, EventArgs e)
{ //Чтение из файла в TextBox
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
string filename = openFileDialog1.FileName;
string fileText = File.ReadAllText(filename);
textBox1.Text = fileText;
}
}
Слайд 24

Пример записи из TextBox в файл с использованием SaveFileDialog. private void

Пример записи из TextBox в файл с использованием SaveFileDialog.

private void button2_Click(object

sender, EventArgs e)
{ //Запись из TextBox в файл
saveFileDialog1.Filter = "Text files(*.txt)|*.txt|All
files(*.*)|*.*";
if (saveFileDialog1.ShowDialog() == DialogResult.Cancel)
return;
string filename = saveFileDialog1.FileName;
File.WriteAllText(filename, textBox1.Text);
}
Слайд 25

Выполнить следующее задание Работа с файлами. Создать текстовый файл и записать

Выполнить следующее задание

Работа с файлами. Создать текстовый файл и записать

в него информацию (например, описание правил некоторой игры). Составить программу, которая при нажатии на кнопку “Читать” (Button1) читает информацию из этого файла и выводит её на экран в поле TextBox, и затем при нажатии на кнопку “Сохранить” (Button2) записывает (копирует) эту информацию в другой текстовый файл.
Слайд 26

Компонент ListBox Компонент ListBox представляет собой список, в котором можно выбрать

Компонент ListBox

Компонент ListBox представляет собой список, в котором можно выбрать нужный

элемент. Ключевым свойством этого элемента является свойство Items, которое как раз и хранит набор всех элементов списка. Основные свойства компонента приведены в таблице:
Слайд 27

Компонент ListBox Элементы в список могут добавляться как во время разработки,

Компонент ListBox

Элементы в список могут добавляться как во время разработки, так

и программным способом. В Visual Studio в окне Properties (Свойства) для элемента ListBox мы можем найти свойство Items. После двойного щелчка на свойство нам отобразится окно для добавления элементов в список.

Окно добавления элементов

ListBox с введенными элементами

В пустое поле мы вводим по одному элементу списка - по одному на каждой строке. После этого все добавленные нами элементы окажутся в списке, и мы сможем ими управлять:

Слайд 28

Компонент ListBox Все элементы списка входят в свойство Items, которое представляет

Компонент ListBox

Все элементы списка входят в свойство Items, которое представляет собой

коллекцию. Для добавления нового элемента в эту коллекцию, а значит и в список, надо использовать метод Add, например: listBox1.Items.Add("Новый элемент");. При использовании этого метода каждый добавляемый элемент добавляется в конец списка.
Можно добавить сразу несколько элементов, например, массив. Для этого используется метод AddRange:
string[] countries = { "Бразилия","Аргентина","Чили", "Уругвай", "Колумбия"};
listBox1.Items.AddRange(countries)
В отличие от простого добавления вставка производится по определенному индексу списка с помощью метода Insert. В данном случае вставляем элемент на вторую позицию в списке, так как отсчет позиций начинается с нуля.
listBox1.Items.Insert(1, "Парагвай");
Слайд 29

Компонент ListBox Для удаления элемента по его тексту используется метод Remove:

Компонент ListBox

Для удаления элемента по его тексту используется метод Remove:
listBox1.Items.Remove("Чили");
Чтобы удалить

элемент по его индексу в списке, используется метод RemoveAt:
listBox1.Items.RemoveAt(1);
Кроме того, можно очистить сразу весь список, применив метод Clear:
listBox1.Items.Clear();
Используя индекс элемента, можно найти сам элемент в списке. Например, получим первый элемент списка:
string firstElement = listBox1.Items[0];
Метод Count позволяет определить количество элементов в списке.
Слайд 30

Компонент ListBox При выделении элементов списка мы можем ими управлять как

Компонент ListBox

При выделении элементов списка мы можем ими управлять как через

индекс, так и через сам выделенный элемент. Получить выделенные элементы можно с помощью следующих свойств элемента ListBox:
SelectedIndex: возвращает или устанавливает номер выделенного элемента списка. Если выделенные элементы отсутствуют, тогда свойство имеет значение -1
SelectedIndices: возвращает или устанавливает коллекцию выделенных элементов в виде набора их индексов
SelectedItem: возвращает или устанавливает текст выделенного элемента
SelectedItems: возвращает или устанавливает выделенные элементы в виде коллекции
Слайд 31

Компонент ListBox По умолчанию список поддерживает выделение одного элемента. Чтобы добавить

Компонент ListBox

По умолчанию список поддерживает выделение одного элемента.
Чтобы добавить возможность

выделения нескольких элементов, надо установить у его свойства SelectionMode значение MultiSimple.
Чтобы выделить элемент програмно, надо применить метод
SetSelected(int index, bool value),
где index - номер выделенного элемента.
Если второй параметр - value имеет значени true, то элемент по указанному индексу выделяется, если false, то выделение, наоборот, скрывается:
listBox1.SetSelected(2, true); // будет выделен третий элемент
Чтобы снять выделение со всех выделенных элементов, используется метод ClearSelected.
Слайд 32

Пример использования компонента ListBox На рисунке представлена форма со списком ListBox

Пример использования компонента ListBox

На рисунке представлена форма со списком ListBox и

текстовый файл, в котором он сохранен:

ListBox

текстовый файл.

Слайд 33

Код программы работы со списком ListBox для этого примера. private void

Код программы работы со списком ListBox для этого примера.

private void

button4_Click(object sender, EventArgs e)
{//Сохранение в файле
saveFileDialog1.Filter = "Text files(*.txt)|*.txt|All files(*.*)|*.*";
if (saveFileDialog1.ShowDialog() == DialogResult.Cancel)
return;
string filename = saveFileDialog1.FileName;
WriteToFile(filename, listBox1);
}
private void WriteToFile(string path, ListBox listBox)
{ using (var sw = new StreamWriter(new FileStream(path, FileMode.Create)))
{ if (listBox != null)
{ foreach (var item in listBox.Items) // в таком же порядке
{ sw.WriteLine(item.ToString());
}
}
}
}
Слайд 34

Код программы работы со списком ListBox для этого примера. Продолжение. private

Код программы работы со списком ListBox для этого примера. Продолжение.

private void

button1_Click(object sender, EventArgs e)
{//Добаляем элемент
listBox1.Items.Add(textBox1.Text);

private void button2_Click(object sender, EventArgs e)
{//Удаляем элемент
listBox1.Items.Remove("Горох");

private void button3_Click(object sender, EventArgs e)
{//Очищаем список
listBox1.Items.Clear();
}
}
Слайд 35

Задание для самостоятельной работы Напишите программу, состоящую из двух списков Listbox.

Задание для самостоятельной работы

Напишите программу, состоящую из двух списков Listbox. В

первом будет, например, перечень товаров, заданный программно. Второй изначально пуст, пусть это будет перечень покупок. При клике на одну кнопку товар должен помещаться из списка товаров в список покупок. При клике на вторую кнопку – удаляться из списка покупок (человек передумал покупать). Список товаров не должен изменяться.
(Дополнительно: предусмотрите возможность множественного выбора элементов списка и их перемещения.)
Слайд 36

Список ComboBox. Для хранения элементов списка в ComboBox также предназначено свойство

Список ComboBox.

Для хранения элементов списка в ComboBox также предназначено свойство Items.

Подобным образом, как и с ListBox, мы можем в окне свойств выбрать свойство Items и нам отобразится окно для добавления элементов ComboBox:

Редактор строк ComboBox.

Компонент ComboBox совмещает в себе список и текстовое поле. По этой причине у него есть свойство Text – текст, находящийся в поле ввода/редактирования. Отметим также свойство DropDownStyle – вид компонента: DropDown − поле ввода и раскрывающийся список; Simple − поле ввода со списком; DropDownList − раскрывающийся список. Ниже мы поясним действие этого свойства на примерах. Остальные его свойства аналогичны свойствам ListBox (см. таблицу свойств ListBox ).

Слайд 37

Список ComboBox. И, как и с компонентом ListBox, здесь мы также

Список ComboBox.

И, как и с компонентом ListBox, здесь мы также можем


программно управлять элементами.
Добавление элементов:
comboBox1.Items.Add("Парагвай");// добавляем один элемент
comboBox1.Items.AddRange(new string[] { "Уругвай", "Эквадор" });
//добавляем набор элементов
comboBox1.Items.Insert(1, "Боливия");// добавляем один элемент
// на определенную позицию
Удаление элементов: 
comboBox1.Items.Remove("Аргентина");// удаляем один элемент
comboBox1.Items.RemoveAt(1); // удаляем элемент по индексу
comboBox1.Items.Clear(); // удаляем все элементы
Мы можем получить элемент по индексу и производить с ним разные действия. Например, изменить его
comboBox1.Items[0] = "Парагвай";
Слайд 38

Свойства ComboBox. С помощью ряда свойств можно настроить стиль оформления компонента:

Свойства ComboBox.

С помощью ряда свойств можно настроить стиль оформления компонента:
Свойство DropDownWidth

и DropDownHeight задает ширину и высоту выпадающего списка.
Свойство MaxDropDownItems позволяет задать число видимых элементов списка –
от 1 до 100. (По умолчанию это число равно 8.)
Свойство DropDownStyle задает стиль ComboBox. Оно может принимать три возможных значения:
Dropdown: используется по умолчанию. Мы можем открыть
выпадающий список вариантов при вводе значения в текстовое поле
или нажав на кнопку со стрелкой в правой части элемента,
и нам отобразится собственно выпадающий список, в котором
можно выбрать возможный вариант
DropdownList: чтобы открыть выпадающий список,
надо нажать на кнопку со стрелкой в правой стороне элемента
Simple: ComboBox представляет простое текстовое поле,
в котором для перехода между элементами мы можем
использовать клавиши клавиатуры вверх/вниз
Слайд 39

Учебная программа «Угадай число» Суть игры проста: игрок загадывает и вводит

Учебная программа «Угадай число»

Суть игры проста: игрок загадывает и вводит цифру,

а программа генерирует случайное число. Если эти числа совпали, игрок получает бонусы. Код программы с комментариями приведен ниже.
Слайд 40

Программа «Угадай число» namespace Ugadai_chislo { public partial class Form1 :

Программа «Угадай число»

namespace Ugadai_chislo
{
public partial class Form1 : Form
{

public Form2 frm2;
public Form1()
{
InitializeComponent();
}
private void button1_Click (object sender, EventArgs e)
{
this.Close();//Конец игры
}
Слайд 41

Программа «Угадай число» private void button2_Click(object sender, EventArgs e) { frm2

Программа «Угадай число»

private void button2_Click(object sender, EventArgs e)
{
frm2 =

new Form2();//Создаем указатель на форму2
frm2.frm1 = this;//Передаем форме2 указатель на форму1
frm2.BackColor = Color.Cyan;//Меняем цвет формы2
frm2.Show();//Показываем форму2
frm2.label1.Text = textBox1.Text + " " + textBox2.Text +
"! Поиграем?";
}
}
}
Слайд 42

Программа «Угадай число» namespace Ugadai_chislo { public partial class Form2 :

Программа «Угадай число»

namespace Ugadai_chislo
{
public partial class Form2 : Form
{

public Form1 frm1;
int c = 0;
int k = 0;
Random rnd = new Random();
public Form2()
{
InitializeComponent();
}
Слайд 43

Программа «Угадай число» private void button1_Click(object sender, EventArgs e) { int

Программа «Угадай число»

private void button1_Click(object sender, EventArgs e)
{
int b,

d=0;
bool f = true;
string s = textBox1.Text; // считываем число игрока
try
{//Проверка: вдруг не число
d = Convert.ToInt32(s);
c++; //счет ходов
}
catch
{
textBox1.Text = "";
f = false;
}
Слайд 44

Программа «Угадай число» if (f) { //Если число b = rnd.Next(1,6);

Программа «Угадай число»

if (f)
{ //Если число
b = rnd.Next(1,6);
if

(d==b)
{
k++; //Счет совпадений
}
s = s + " - " + b.ToString();
listBox1.Items.Add(s);
}
if (c==5) //Всего пять ходов
{
textBox1.Enabled = false;
button1.Enabled = false;
}
}
Слайд 45

Программа «Угадай число» private void button2_Click(object sender, EventArgs e) { this.Hide();//Прячем

Программа «Угадай число»

private void button2_Click(object sender, EventArgs e)
{
this.Hide();//Прячем форму2

frm1.Show();//Показывем форму1
frm1.label4.Text += " " + k.ToString(); //Передаем
// очки на Form1
}
}
}