- •В.А. Новиков Объектно-ориентированное программирование в с#
- •Минск ● вгкс
- •Лабораторная работа 1 Константы, переменные, выражения. Визуальные элементы: кнопка и текстовое поле
- •Лабораторная работа 2 Операторы управления. Визуальные элементы: маскированное поле и установка цвета
- •Лабораторная работа 3 Ввод – вывод на консоль. Визуализация через файлы. Независимый переключатель и шрифты
- •Лабораторная работа 4 Строки. Модальные формы пользователя
- •Лабораторная работа 5 Массивы. Зависимый переключатель
- •Лабораторная 6 Перечисление. Немодальные формы пользователя
- •Лабораторная 7 Регулярные выражения. Таймер
- •Лабораторная работа 8 Прототипы-данные. Визуальный элемент выпадающий список
- •Лабораторная работа 9 Подпрограммы. Визуальный элемент список. Отработка событий клавиатуры
- •Лабораторная работа 10 Обработка исключительных ситуаций. Визуальный элемент закладка tabControl
- •Лабораторная работа 11 Переопределение операций. Закладка TabStrip
- •Лабораторная работа 12 Работа с файлами. Всплывающая подсказка
- •Лабораторная работа 13 Структуры. Перетаскивание элемента на форме
- •Лабораторная работа 14 Построение графиков через Excel. Объект Drawning
- •Содержание
Лабораторная работа 12 Работа с файлами. Всплывающая подсказка
Цель работы.
Изучить формирование программ с использованием файлов. Научиться создавать формы с использованием всплывающей подсказки.
План занятия.
Изучить теоретические сведения формирования программы на С#.
По приведенному листингу программы разработать на Visual Studio программу и отладить ее. Составить программу по индивидуальному заданию.
Краткие теоретические сведения.
Текстовые файлы.
В них информация хранится в виде обычного текста.
Запись в текстовый файл:
Открыть файл на запись.
StreamWriter f = new StreamWriter (a.txt, false, Encoding.GetEncoding( 1251));
Запись в файл методами Write или Writeline
f.Writeline(“a={0} b={1},a,b);
указатель при этом устанавливается на начало следующей строки
Закрыть файл
f.close();
Чтение из текстового файла:
1)открыть файл на чтение
StreamReader f=new StreamReader(“a.txt”,Encoding.GetEncoding(1251));
2) выполнить операции чтения
String S;
…
S= f.ReadLine(); // чтение очередной строки
Указатель при этом устанавливается на начало очередной строки
S= f.ReadToEnd(); – считать с текущей позиции весь текст до конца файла
S=f.ReadBlock(10); – считать с текущей позиции 10 символов, указатель устанавливается на новое место
S.= f.Peek(); – считать символ на указателе , указать при этом остается на том же месте
3) закрыть файл
f.Close();
Поток байтов.
Тип файла FileStream
FileStream f=new FileStream(“a.txt”, mode, режим);
Режим:
FileAccess.Read – только чтение,
FileAccess.Write –только запись,
FileAccess.ReadWrite –чтение\запись.
Mode:
FileMode.Create – новый файл (если такой файл есть, то он стирается),
FileMode.Open – открыть существующий файл,
FileMode.OpenOrCreate – тоже, если файла нет, то он создается,
FileMode.Append –тоже , только указатель устанавливается в конец файла.
Операции над файлами потока байтов.
f.Read(x,0,20) – чтение с текущей позиции в файле,где 0 и 20 начальный и конечный индексы массива x,
f.Read(y) – чтение байта,
f.Seak(5,4); – указатель устанавливается на 5-й символ начиная с 4-го,
f.Seek(5,SeekOrigin.Begin); – на 5-й символ с начала,
a=f.ReadByte(); – прочитать байт на текущей позиции,
f.Close –закрытие файла.
Асинхронный ввод-вывод.
Предназначен для параллельного процесса ввода-вывода и одновременно выполнение других частей программы. Асинхронно можно работать с любыми файлами.
Пример программы
byte[] buf=new byte[100000]
FileStream f=new FileStream(“a.txt”, FileAccess.Read, FileShare.Read, buf.Lenght, true); – true указывает на признак асинхронного ввода-выводы
AsyncCallback callback=new AsyncCallback(fff);
f.BeginRead(buf,0,buf.Lenght,callback,null);
// текст программы бeз использовании buf
// место, где начинает использоваться buf
while(!KodRead){} // до тех пор пока ввод KodRead не будет установлен бесконечный цикл
Выше приведенного текста необходимо поместить установку флага KodRead=false и определить обработчик, выполнение которого осуществляется после полного процесса чтения:
bool KodRead=false;
int Rbutes;
public void fff (IAsyncResult e) //стандартно!
{
Rbutes=f.EndRead (e);
KodRead=true;
}
После окончания процесса полного ввода выполнится процедура fff, которая и устанавливает флаг KodRead. Можно также определить и число считанных байтов Rbutes.
Порядок выполнения работы.
Создайте форму:
Воспроизведите код программы.
//FORM
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 WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button2_Click(object sender, EventArgs e)
{
this.Close();
}
private void button1_Click(object sender, EventArgs e)
{
double x, y; string st;
x = Convert.ToDouble(textBox1.Text);
y = Math.Sin(x);
st = String.Format("{0,4:0.##}",y);
textBox2.Text = st;
}
private void Form1_Load_1(object sender, System.EventArgs e)
{
ToolTip toolTip2 = new ToolTip();
toolTip2.AutoPopDelay = 5000;
toolTip2.InitialDelay = 100;
toolTip2.ReshowDelay = 50;
toolTip2.BackColor = Color.Azure;
toolTip2.ShowAlways = true;
toolTip2.SetToolTip(this.button1, " ");
toolTip2.ToolTipTitle = "4444444";
}
private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
Point p = pictureBox1.Location; // позиция левого верхнего угла pictureBox1
Point p1 = this.Location; // позиция левого верхнего угла формы
// e.X и e.Y погиция курсора в pictureBox1
int XX, YY;
XX = e.X + p.X + p1.X; YY = e.Y + p.Y + p1.Y;
toolTip1.ToolTipTitle = Convert.ToString(XX) + "; " + Convert.ToString(YY);
toolTip1.SetToolTip(this.pictureBox1, " ");
}
}}
Создайте форму:
//ПОДСКАЗКА С ОТОБРАЖЕНИЕМ Color
Воспроизведите код программы.
//FORM
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button2_Click(object sender, EventArgs e)
{
this.Close();
}
private void button1_Click(object sender, EventArgs e)
{
double x, y; string st;
x = Convert.ToDouble(textBox1.Text);
y = Math.Sin(x);
st = String.Format("{0,4:0.##}",y);
textBox2.Text = st;
}
private void Form1_Load_1(object sender, System.EventArgs e)
{
// Create the ToolTip and associate with the Form container.
ToolTip toolTip2 = new ToolTip();
// Set up the delays for the ToolTip.
toolTip2.AutoPopDelay = 5000;
toolTip2.InitialDelay = 100;
toolTip2.ReshowDelay = 50;
toolTip2.BackColor = Color.Azure;
// Force the ToolTip text to be displayed whether or not the form is active.
toolTip2.ShowAlways = true;
// Set up the ToolTip text for the Button and Checkbox.
toolTip2.SetToolTip(this.button1, " ");
toolTip2.ToolTipTitle = "4444444";
}
private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
Point p = pictureBox1.Location; // позиция левого верхнего угла pictureBox1
Point p1 = this.Location; // позиция левого верхнего угла формы
// e.X и e.Y погиция курсора в pictureBox1
int XX, YY;
XX = e.X + p.X + p1.X; YY = e.Y + p.Y + p1.Y;
Bitmap bmp=new Bitmap(1,1);
using (Graphics g = Graphics.FromImage(bmp))
{ g.CopyFromScreen(XX, YY, 0, 0,new Size(1,1)); }
Color color = bmp.GetPixel(0,0);
string SS;
SS=Convert.ToString(color);
toolTip1.ToolTipTitle = SS;
toolTip1.SetToolTip(this.pictureBox1, " ");
}
}}
Индивидуальное задание.
Доработайте вторую программу, что бы во всплывающей подсказке выводились значения из текстовых элементов виде: x=4.5; y=7.2;
С использование файла типа поток байтов сформируйте строку текста. В каждом слове замените первые прописные буквы на заглавные. Результат выведите в текстовый файл.
Содержание отчета.
Представить отлаженные программы по индивидуальному заданию.
Литература.
Павловская Т.А. С#, Программирование на языке высокого уровня. – М., СПб: Питер, 2010, с.246-271