Компиляция и запуск приложения.



Для компиляции выполним Построение -> построить 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; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!