- •В.А. Новиков Объектно-ориентированное программирование в с#
- •Минск ● вгкс
- •Лабораторная работа 1 Константы, переменные, выражения. Визуальные элементы: кнопка и текстовое поле
- •Лабораторная работа 2 Операторы управления. Визуальные элементы: маскированное поле и установка цвета
- •Лабораторная работа 3 Ввод – вывод на консоль. Визуализация через файлы. Независимый переключатель и шрифты
- •Лабораторная работа 4 Строки. Модальные формы пользователя
- •Лабораторная работа 5 Массивы. Зависимый переключатель
- •Лабораторная 6 Перечисление. Немодальные формы пользователя
- •Лабораторная 7 Регулярные выражения. Таймер
- •Лабораторная работа 8 Прототипы-данные. Визуальный элемент выпадающий список
- •Лабораторная работа 9 Подпрограммы. Визуальный элемент список. Отработка событий клавиатуры
- •Лабораторная работа 10 Обработка исключительных ситуаций. Визуальный элемент закладка tabControl
- •Лабораторная работа 11 Переопределение операций. Закладка TabStrip
- •Лабораторная работа 12 Работа с файлами. Всплывающая подсказка
- •Лабораторная работа 13 Структуры. Перетаскивание элемента на форме
- •Лабораторная работа 14 Построение графиков через Excel. Объект Drawning
- •Содержание
Лабораторная работа 13 Структуры. Перетаскивание элемента на форме
Цель работы.
Изучить формирование программ с использованием структур. Научиться создавать формы с использованием перетаскивания элементов формы.
План занятия.
Изучить теоретические сведения формирования программы на С#.
По приведенному листингу программы разработать на Visual Studio программу и отладить ее. Составить программу по индивидуальному заданию.
Краткие теоретические сведения.
Структуры.
Под структурой понимается инкансулированный набор переменных (свойств) и подпрограмм (методов). В качестве полей структуры нельзя использовать массивы любого типа.
Пример
Надо создать полный набор арифметики для комплексного числа.
1. Свойства re, и im – действительная и мнимая части комплексного числа
2. Методы:
а) переопределенные операции + - *
б) метод получения модуля
в) метод получения строки ввода на печать
Шаблон структуры:
struct complex
{
public double re=0, im=0;
Конструктор полный
переопр. +
переопр. –
переопр. *
модуль
строка вывода
}
Конструктор полный
public complex (double re, double im)
{tris.re = re; this.im=im;} // Это переменные, объявленные свойствами в структуре.
// переопр. + (для – тоже самое, с заменой + на –)
public static complex operator + (complex a, complex b)
{
complex z;
z.re=a.re+b.re;
z.im=a.im+b.im;
return z;
}
переопр. *
public static complex operator * (complex a, complex b)
{
complex z;
z.re=a.re*b.re-a.im*b.im;
z.im= a.re*b.im+a.im*b.re;
return z;
}
Модуль
public double CMod (complex a)
{double Z;
Z=a.re*a.re-a.im*a.im;
return z;
}
Строка вывода
Для этого надо переопределить метод ToString( ) преобразования этого типа сomplex в string
public override string ToString( )
{
return(string.Format(“{0}+i{1}”,this.re,this.im);
}
Пример программы:
complex a; // конструктор по умолчанию
complex b = new complex(1,4);
a.re=5; a.im=6;
complex y; y = a+b;
console.Writeline(“y={0}”+y); // будет выведено y=6+i10
Порядок выполнения работы.
Создайте форму:
// ПЕРЕТАСКИВАНИЕ ЭЛЕМЕНТА
Воспроизведите код программы.
//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, " ");
}
bool MouseState = false;
Point PrevMousePos;
private void pictureBox2_MouseDown(object sender, MouseEventArgs e)
{
PrevMousePos = new Point(e.X, e.Y);
if (e.Button == MouseButtons.Left) { this.MouseState = true; }
}
private void pictureBox2_MouseUp_1(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left) { this.MouseState = false; }
}
private void pictureBox2_MouseMove_1(object sender, MouseEventArgs e)
{
if (this.MouseState)
{
int dx = e.X - PrevMousePos.X;
int dy = e.Y - PrevMousePos.Y;
pictureBox2.Location = new Point(pictureBox2.Location.X + dx, pictureBox2.Location.Y + dy);
}
}}}
Индивидуальное задание.
Всю арифметику для комплексных чисел. Вычислите выражение над комплексными числами a и b:
Все исходные данные и результат введите через форму.
Содержание отчета.
Представить отлаженные программы по индивидуальному заданию.
Литература.
Павловская Т.А. С#, Программирование на языке высокого уровня. – М., СПб: Питер, 2010, с.212-215