Компиляция и запуск приложения.
Для компиляции выполним Построение -> построить WindowsFormsApplX_X, где WindowsFormsApplX_X - имя проекта. При этом заново компилируются все модули, которые изменились после последней компиляции.
Запуск выполняется командой Отладка ->запуск без отладки. В результате на экране появится главная форма приложения Form1.
Разработку Windows-приложения продемонстрируем на примере простой программы "Визитка". Такую Визитку будем размещать в левом верхнем углу главной формы в каждом приложении.
Лабораторная работа №1.
Тема: создание простой программы Windows-приложения. Перетаскивание компонентов на форму. Настройка свойств компонентов. Создание обработчиков событий.
Задание. Разработать программу Визитка, которая после запуска выводит визитку бригады в левом верхнем углу формы Form1 приложения и после нажатия на кнопку Выход завершается.
Пример. Разрабатывается Визитка студентов Быстрова и Крымова из бригады 1 группы БЭИ.
· Запустить Visual Studio.NET.
· Создать проект с именем WindowsFormAppl1_1. В открывшемся окне Form1.cs[конструктор] появляется пустая форма Form1 - главный компонент приложения.
· Заменить заголовок формы Form1(по умолчанию) на Form1Apple1_1. Настройка компонентов производится с помощью окна свойств. Чтобы открыть его, выполним команду главного меню Вид -> окно свойств. Найдем свойство компонента Form1 с именем Text, заменим его значение Form1 на Form1Apple1_1.
· Создать визитку следующего вида:
|
|
Откроем панель элементов библиотеки компонентов командой Вид ->панель элементов. Перетащим на форму пять компонентов Label. Для настройки щелчком активизируем компонент Label один за другим и запишем:
в свойстве Text компонента Label1 значение **********
в свойстве Text компонента Label2 значение ГРУППА БЭИ
в свойстве Text компонента Label3 значение Бригада 1:
в свойстве Text компонента Label4 значение 1) Быстров 2) Крымов
в свойстве Text компонента Label5 значение **********
Шрифт, размер и др. параметры текста меняются с помощью свойства Font.
· Для завершения приложения создадим кнопку Выход. Перетащим на форму компонент Button1. В свойстве Text запишем значение Выход. Дважды щелкнем по кнопке Выход - откроется окно редактор кода. Там появляется шаблон обработчика события Click (нажатия кнопки) с пустым телом, в котором стоит курсор. Запишем туда функцию Close();
Разработка приложения закончена. Тест программы приведен целиком.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsAppl1_1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
|
|
{
Close(); // Завершение работы приложения
}
}
}
Скомпилировать программу: Построение->Построить WindowsFormAppl1-1. В результате в окне список ошибок увидим: Ошибок: 0 и внизу Построение успешно завершено.
Запустить приложение: Отладка ->Запуск без отладки. На экране появится форма с визиткой бригады. Нажатием кнопки Выход завершить приложение.
Лабораторная работа №2.
Тема: Несколько форм в приложении. Создать программу из главной функции и трех подчиненных функций.
Задание. Для каждой функции разработать свою форму.
Пример.
Запустить Visual Studio.NET. На начальной странице выбрать Создать проект, язык VisualC# и Приложение_WindowsForm. В поле имя ввести название проекта WindowsFormAppl1_2 и нажать ОК. В результате откроется чистая форма Form1.cs.
Разработка формы 1.
Заменить заголовок формы Form1 на Main.
С помощью пяти компонентов Label создать Визитку бригады ( как в лаб. работе 1).
Добавить компонент Button1 для кнопки Выход. В его свойстве Text записать Выход.
Создать меню главной функции с помощью Label6 и трех компонентов button-кнопок.
В свойстве Text компонента Label6 записать МЕНЮ.
В свойстве Text компонента Button2 записать Вычисление выражения.
В свойстве Text компонента Button3 записать Создать массив с помощью ДСЧ.
|
|
В свойстве Text компонента Button4 записать Найти максимальный элемент.
В результате получаем картинку:
Прежде чем написать обработчики событий добавим еще три формы:
Проект ->Добавить форму Windows ->Форма WindowsForm ->Добавить.
В результате три чистые формы Form2, Form3, Form4 будут включены в проект.
Далее необходимо обеспечить вызов форм по нажатию кнопок 2,3,4, которые должны вызывать переход соответственно на формы 2,3,4, а нажатие на кнопку ВЫХОД (Button1) вызывать завершение работы приложения.
Тексты обработчиков:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsAppl1_2
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void button1_Click(object sender, EventArgs e)
{
Application.Exit(); // Завершение приложения
}
private void button2_Click(object sender, EventArgs e)
{
Form2 F = new Form2();
F.Show(); // Вызов Form2
}
private void button2_Click(object sender, EventArgs e)
{
Form3 F = new Form3();
F.Show(); // Вызов Form3
}
{
Form4 F = new Form4();
|
|
F.Show(); // Вызов Form4
}
}
}
Разработка формы Form2:
· Создать надписи с помощью компонентов Label
Label1 <--> Вычисление выражения.
Label2 <--> Исходные данные.
Label3 <--> а=
Label4 <--> х=
Label5 <--> Результат:
· Для ввода исходных данных и вывода результата использовать компонент textBox.
Для значения a <--> textBox1.
Для значения x <--> textBox2.
Для значения результата <--> textBox3.
· Добавить два компонента Button – кнопки Выполнить и Закрыть. Нажатие кнопки Выполнить - событие, обработка которого вызывает вычисление выражения. Обработчики событий нажатия кнопок Выполнить и Закрыть имеют вид:
private void button1_Click(object sender, EventArgs e)
{
// Вычисление выражения y = a*a+Sqrt(a + x)
Int32 a, x, y;
a = Convert.ToInt32(textBox1.Text);
x = Convert.ToInt32(textBox2.Text);
y = a*a + Convert.ToInt32(Math.Sqrt(a + x));
textBox3.AppendText( Convert.ToString( y ));
}
private void button2_Click(object sender, EventArgs e)
{
Close(); // Закрыть форму
}
Разработка формы Form3, которая должна иметь следующий вид:
Обработчики событий нажатия кнопок Выполнить и Выход:
private void button1_Click(object sender, EventArgs e)
{
// Создание массива из n чисел с помощью ДСЧ
Int32 n;
n = Convert.ToInt32(textBox1.Text);
int[] mas = new int[n];
Random rand = new Random();
textBox1.Clear();
for (int i = 0; i < n; i++)
{
mas[i] = rand.Next(-20,20);
textBox2.AppendText(mas[i] + " ");
}
}
private void button2_Click(object sender, EventArgs e)
{
Close();
}
Разработка формы Form4. Обработчик события для кнопки Выполнить:
private void button1_Click(object sender, EventArgs e)
{
// Найти максимальный элемент массива
int n;
n = Convert.ToInt32(textBox1.Text);
int[] masF4 = new int[n];
Random R = new Random();
for (int i = 0; i < n; i++)
{
masF4[i] = R.Next(-20, 20);
textBox2.AppendText(masF4[i] + " ");
}
int max = masF4[0];
for (int i = 0; i < n; i++)
if (masF4[i] > max)
max = masF4[i];
textBox3.AppendText(Convert.ToString(max));
}
Вид, который должна иметь форма Form4:
· Закончив разработку всех форм приложения, выполнить
Построение -> Построить WindowsFormsAppl1-2. (Предварительно нужно сделать активной главную форму MAIN).
· Если ошибок нет, появится сообщение Построение успешно завершено. Можно запускать приложение на выполнение: (Отладка -> Запуск без отладки)
В результате на экране появится главная форма Main, содержащая меню.
· Нажимая на кнопки пунктов меню, проверить переход на формы Form2, Form3, Form4. В открытой форме нажатием кнопки Выполнить вызвать выполнение программы, соответствующей меню. Затем нажатием кнопки Закрыть вернуться на главную страницу Main. В главной форме Main нажать кнопку Выход и завершить выполнение приложения.
Лабораторная работа №3.
Тема: работа с файлами. Классы. Коллекции объектов с внутренней структурой.
Задание. Разработать программу Телефонный справочник, которая позволяет накапливать данные о контактах в текстовом файле. Читать записи из файла и отображать их в списке контактов для просмотра, добавлять новые данные, удалять устаревшие и сохранять сделанные изменения в файле.
Данные о контакте определить как публичные строковые переменные в классе Record. Переменные должны быть публичными, чтобы к ним можно было обращаться из других классов.
Создать заранее тестовый файл с именем Data.txt. Пусть формат записи в файле состоит из трех строк (Fam, Name, Phone) + одна для служебных целей (заполним ее символом $). Кстати, текстовый файл можно просматривать, заполнять и редактировать вручную с помощью Блокнота.
Файл Data.txt в Блокноте будет иметь вид:
Макет формы программы «Телефонный справочник» :
Перетащим на форму компонент ListBox (для отображения списка контактов), три компонента textBox (для полей Fam, Name, Phone), три компонента Label (для надписей над полями) и два компонента Button (для кнопок: Выполнить, Удалить)
Добавим в секцию Using две записи:
Using System.IO; // для файловых потоков
Using System.Collection.ObjectModel; // для коллекций
Определим класс Record и коллекцию элементов класса Record
public class Record
{
public String Name, Fam, Phone;
};
public Collection<Record> records = new Collection<Record>();
Объявим два файловых потока:
StreamReader reader; // для чтения из файла
StreamWriter writer; // для записи в файл
Напишем две вспомогательные функции для работы с файлом Data.txt:
LoadFromFile() – создает поток reader и читает через поток данные из файла;
SaveToFile()– создает поток writer и переписывает данные из коллекции в файл
Еще одна вспомогательная функция FillListBox отображает коллекцию записей в ListBox. Кроме того, в конец списка добавляет еще один элемент «новый», для того, чтобы была возможность добавлять новые элементы:
private void FillListBox()
{
listBox1.Items.Clear();
for (int i = 0; i < records.Count; i++)
{
listBox1.Items.Add(records[i].Name + " " + records[i].Fam);
}
listBox1.Items.Add("(новый)");
}
Создать обработчики событий загрузки формы Load, показа формы Shown, события изменения списка SelectedIndexChanged и события нажатия кнопок.
Load <-> Form1_Load вызывает функцию LoadFromFile(), которая читает данные из файла Data.txt, пока не встретится конец файла, и помещает данные в коллекцию записей.
private void LoadFromFile()
{
Record record;
reader = new StreamReader("C:\\Data.txt");
while (!reader.EndOfStream)
{
record = new Record();
record.Name = reader.ReadLine();
record.Fam = reader.ReadLine();
record.Pnone = reader.ReadLine();
reader.ReadLine();
records.Add(record);
}
reader.Close();
}
SaveToFile() – создает файловый поток writer и переписывает данные из записей коллекции в файл:
private void SaveToFile()
{
writer = new StreamWriter("C:\\Users\\1\\Documents\\DataTS\\datatels.txt");
for (int i = 0; i < records.Count; i++)
{
writer.WriteLine(records[i].Name);
writer.WriteLine(records[i].Fam);
writer.WriteLine(records[i].Pnone);
writer.WriteLine("$");
}
writer.Close();
}
Shown<-> Form1_Show FillListBox();
private void FillListBox()
{
listBox1.Items.Clear();
for (int i = 0; i < records.Count; i++)
{
listBox1.Items.Add(records[i].Name + " " + records[i].Fam);
}
listBox1.Items.Add("(новый)");
}
В результате все записи будут прочитаны из файла (если они там есть) и помещены в коллекцию записей и затем отображены в ListBox.
Если выбрана запись из списка контактов, то значения полей этой записи отображается в соответствующих полях(textBox). Если же выбран элемент «новый», поля будут очищены.
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
if (listBox1.SelectedIndex < 0) return;
if (listBox1.SelectedIndex < records.Count)
{
textBox1.Text = records[listBox1.SelectedIndex].Surname;
textBox2.Text = records[listBox1.SelectedIndex].Name;
textBox3.Text = records[listBox1.SelectedIndex].Telephone;
}
else
{
textBox1.Text = " ";
textBox2.Text = " ";
textBox3.Text = " ";
}
}
Обработчики событий нажатия кнопки Добавить(Button1) позволяет добавить данные одного контакта в список; Удалить(Button2) позволяет удалить данные одного контакта из списка. При любом изменении список должен быть сохранен в файле.
Обработчики события нажатия кнопок Добавить и Удалить:
private void button1_Click_1(object sender, EventArgs e)
{
if (listBox1.SelectedIndex == listBox1.Items.Count - 1)
{
Record record = new Record();
record.Name = textBox1.Text;
record.Fam = textBox2.Text;
record.Pnone = textBox3.Text;
records.Add(record);
}
SaveToFile();
FillListBox();
}
private void button2_Click(object sender, EventArgs e)
{
if (listBox1.SelectedIndex < records.Count)
records.Remove(records[listBox1.SelectedIndex]);
SaveToFile();
FillListBox();
}
Построить и запустить программу.
Во время работы программы «Телефонный справочник» форма Form1 имеет вид:
Текст программы приведен полностью:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Collections.ObjectModel;
namespace WindowsFormsApplTSp
{
public partial class Form1 : Form
{
public class Record
{
public String Fam, Name, Pnone;
};
public Collection<Record> records = new Collection<Record>();
StreamReader reader;
StreamWriter writer;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
LoadFromFile();
}
private void SaveToFile()
{
writer = new StreamWriter("C:\\Users\\1\\Documents\\DataTS\\datatels.txt");
for (int i = 0; i < records.Count; i++)
{
writer.WriteLine(records[i].Name);
writer.WriteLine(records[i].Fam);
writer.WriteLine(records[i].Pnone);
writer.WriteLine("$");
}
writer.Close();
}
private void LoadFromFile()
{
Record record;
reader = new StreamReader("C:\\Users\\1\\Documents\\DataTS\\datatels.txt");
while (!reader.EndOfStream)
{
record = new Record();
record.Fam = reader.ReadLine();
record.Name = reader.ReadLine();
record.Pnone = reader.ReadLine();
reader.ReadLine();
records.Add(record);
}
reader.Close();
}
private void Form1_Shown(object senser, EventArgs e)
{
FillListBox();
}
private void FillListBox()
{
listBox1.Items.Clear();
for (int i = 0; i < records.Count; i++)
{
listBox1.Items.Add(records[i].Fam + " " + records[i].Name + " ");
}
listBox1.Items.Add("(новый)");
}
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
if (listBox1.SelectedIndex < 0) return;
if (listBox1.SelectedIndex < records.Count)
{
textBox1.Text = records[listBox1.SelectedIndex].Fam;
textBox2.Text = records[listBox1.SelectedIndex].Name;
textBox3.Text = records[listBox1.SelectedIndex].Pnone;
}
else
{
textBox1.Text = "";
textBox2.Text = "";
textBox3.Text = "";
}
}
private void button2_Click(object sender, EventArgs e)
{
if (listBox1.SelectedIndex < records.Count)
records.Remove(records[listBox1.SelectedIndex]);
SaveToFile();
FillListBox();
}
private void button1_Click(object sender, EventArgs e)
{
if (listBox1.SelectedIndex == listBox1.Items.Count - 1)
{
Record record = new Record();
record.Fam = textBox1.Text;
record.Name = textBox2.Text;
record.Pnone = textBox3.Text;
records.Add(record);
}
SaveToFile();
FillListBox();
}
}
}
Варианты индивидуальных заданий взять из приложения 1 в [2].
Список литературы
1. Павловская Т.А. C#. Программирование на языке высокого уровня. Учебник для вузов. СПб: Питер,2014, 423с.
2. Бухгольц Н.В. Сборник лабораторных работ по дисциплине «Информатика и программирование» - М.:ООО «Инсвязьиздат»,2002.
Оглавление
Введение. - 3 -
1. Консольные приложения на C#. - 4 -
2. Подготовка проекта Windows-приложения. - 9 -
Список литературы.. - 22 -
Дата добавления: 2018-05-12; просмотров: 524; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!