Перейти к содержимому

- - - - -

C# лабораторные работы


  • Вы не можете создать новую тему
  • Please log in to reply
16 ответов в этой теме

#1 Guest_visionland_*

Guest_visionland_*
  • Гость

Отправлено 18 Октябрь 2007 - 17:01

:unsure:
1“ Создание многооконного приложения, имеющего меню.
Рисование прямоугольников под управлением мыши.“

Задание
1. Сделать окно приложения MDI-контейнером.
2. Создать меню приложения, содержащее на верхнем уровне пункт «Окно», а в распахиваюшемся списке команду «Новое» и список открытых окон. Реализовать обработку команды создания нового окна.
3. Реализовать рисование на экране прямоугольников под управлением мыши. При нажатии левой кнопки мыши и ее удержании при перемещении мыши потенциальный прямоугольник должен отображаться пунктиром, при отпускании кнопки мыши прямоугольник должен выводиться сплошной линией. Должно рисоваться произвольное число прямоугольников.

2“Проектирование иерархии классов. Использование контейнерных классов. Перерисовка графической информации."
Задание
1 Спроектировать базовый класс для моделирования различных геоматрических фигур.
2 Спроектировать класс, моделирующий прямоугольник, как производный от класса, спроектированного в пункте 1 задания.
3 Реализовать сохранение информации об изображении в динамическом массиве объектов, имеющих тип класса, спроектированного в пункте 1 задания.
4 Реализовать перерисовку графического изображения, создаваемого в программе.


3“Сохранение документов в файлах."
Задание
1. Добавить в меню программы команды сохранения и открытия файлов. Реализовать сохранение рисунков в файлах и чтение их из файлов. После сохранения файла заголовок окна соответствующего документа должен содержать имя файла. При открытии файла его имя должно использоваться в качестве заголовка окна. Пока нет ни одного открытого окна документа, команды сохранения файла должны быть в заблокированном состоянии.
2. Для измененных документов при закрытии окна следует выдавать диалоговое окно с запросом о сохранении документа и обрабатывать три варианта выбора пользователя – сохранение, отказ от сохранения и отказ от закрытия окна (Yes-No-Cancel).



4“Управление атрибутами графического вывода. Использование окон диалога."
Задание
1 Дополнить модель фигуры атрибутами цвета линии, цвета фона фигуры, толщины линии. Реализовать сохранение этих атрибутов в файлах. Использовать эти атрибуты при рисовании прямоугольников.
2 Добавить в меню верхнего уровня пункт "Параметры". В подменю поместить пункты "Цвет линии", "Цвет фона", "Толщина линии".
3 Реализовать создание соответствующих диалоговых панелей для обработки новых команд меню и использование результатов ввода в программе. В диалоговом окне выбора размера пера использовать комбинированный список с полем ввода (combobox), содержащий список фиксированных размеров(1, 2, 5, 8, 10, 12, 15). Выбранные в диалоговых панелях параметры должны использоваться при рисовании фигур во всех открытых в редакторе окнах. По умолчанию при запуске программы должны использоваться чёрный цвет линии, белый цвет фона и единичная толщина линии.




5“Управление размером рисунка. Прокрутка изображения."
Задание
1. Ввести в меню команду настройки размеров для вновь создаваемых рисунков. Вызываемая диалоговая панель должна содержать выбор размера (c использованием radio-кнопок) из трех фиксированных вариантов (320x240, 640x480, 800x600), флажок выбора ручного ввода размера, поля ввода ширины и высоты рисунка в пикселях. Выбор размера не должен изменять размеры уже существующих рисунков, а должен определять размеры рисунков, создаваемых в дальнейшем командой «Новый».
2. Рисунок должен отображаться и записываться в файл с учетом своего размера. Фон области формы, находящийся вне рисунка, должен отображаться светло-серым цветом. Если при завершении рисования фигуры будет происходить выход контура фигуры за границы рисунка, соответствующая фигура не должна добавляться к рисунку.
3. Дополнить окна документов полосами прокрутки, обеспечить корректное отображение рисунков при скроллинге.

:unsure:

Сообщение изменено: visionland (18 Октябрь 2007 - 17:04 )


#2 Warvick

Warvick
  • Пользователь
  • 411 сообщений
  • Откуда:Tallinn

Отправлено 18 Октябрь 2007 - 19:55

жестоко :)
а как насчёт самом(у/ой) подумать а сюда только кокрентые вопросы постить?:)
  • 0
Да, я такой!

#3 zedirtybastard

zedirtybastard
  • Пользователь
  • 499 сообщений

Отправлено 18 Октябрь 2007 - 20:10

жестоко :)
а как насчёт самом(у/ой) подумать а сюда только кокрентые вопросы постить?:)


да эт щас немодно :)
  • 0

#4 ParadoxL

ParadoxL
  • Постоялец
  • 4 756 сообщений
  • Откуда:Edinburg

Отправлено 25 Октябрь 2007 - 08:21

Ну если задания полностью ... то и девиденды должны присутсвовать. :) Например за каждое задание ... определенная цена (начальная, которую готов заплатить заказчик) ... выставляется на голосование и учасники форума называют свои цены за которые они готовы сделать то или иное задание и в какие сроки ... и заказчик на свое усмотрение выбирает афтара. :)
  • 0
Victoria nulla est, Quam quae confessos animo quoque subjugat hostes ...
Верю в смерть после жизни, любовь после секса и в крем после бритья ...

#5 Guest_visionland_*

Guest_visionland_*
  • Гость

Отправлено 25 Октябрь 2007 - 11:34

К каждой лабе дается пояснение и подробное описание как делать! Пришлю человеку, который решиться помочь мне! :rolleyes:

#6 ParadoxL

ParadoxL
  • Постоялец
  • 4 756 сообщений
  • Откуда:Edinburg

Отправлено 25 Октябрь 2007 - 12:05

visionland, как ты смел заметить тут два варианта ... ты делаешь сам и непонятные моменты пишешь сюда, тебе помогают гурьбой. И второй ... ты не паришься и кто-то делает за тебя, но это будет уже не позывы альтруизма :)

ЗЫ! Тебе решать ...
  • 0
Victoria nulla est, Quam quae confessos animo quoque subjugat hostes ...
Верю в смерть после жизни, любовь после секса и в крем после бритья ...

#7 UnNown™

UnNown™
  • Пользователь
  • 207 сообщений

Отправлено 27 Октябрь 2007 - 21:11

наглость второе счастье =) я конечно делал людям за просто так лабы и проги, но там люди были те которых я знал, ну или когда народ предлогал цену и я , обламывая всем кайф, выкладывал решение просто так. но тут другой случай =) наврядли кто захочет терять время просто так....
  • 0

#8 Uletevshij

Uletevshij
  • Пользователь
  • 12 сообщений

Отправлено 07 Ноябрь 2007 - 01:40

я постараюсь бесплатно сделать - сам этот язык учу :)
  • 0

#9 SmokEr

SmokEr
  • Пользователь
  • 119 сообщений

Отправлено 12 Ноябрь 2007 - 15:53

К каждой лабе дается пояснение и подробное описание как делать! Пришлю человеку, который решиться помочь мне! :rolleyes:

Меня очень интересует описание с пояснениями, но не обещаю что справлюсь.. ввиду нехватки времени, но постараюсь ввиду личной заинтересованности.
Мыло:
smoker@hot.ee
  • 0

#10 SmokEr

SmokEr
  • Пользователь
  • 119 сообщений

Отправлено 14 Ноябрь 2007 - 09:32

1-ый пункт задания:
using System;
using System.Drawing;
using System.Windows.Forms;
using System.Collections;

class MainForm : Form
{
	private MainMenu mainMenu;
	
	static void Main()
	{
		Application.Run(new MainForm());
	}
	public MainForm()
	{
		this.IsMdiContainer = true;
		this.ClientSize = new Size(500, 500);
		
		mainMenu = new MainMenu();
		MenuItem File = mainMenu.MenuItems.Add("&File");
		File.MenuItems.Add(new MenuItem("&New", new EventHandler(this.mFileNewClicked), Shortcut.None));
		File.MenuItems.Add(new MenuItem("&Open"));
		File.MenuItems.Add(new MenuItem("&Exit"));
		
		MenuItem About = mainMenu.MenuItems.Add("&About");
		About.MenuItems.Add(new MenuItem("&About"));
		
		this.Menu=mainMenu;
	}
	
	protected void mFileNewClicked(object obj, EventArgs ea)
	{
		DrawingForm newMDIChild = new DrawingForm();
		newMDIChild.MdiParent = this;
		newMDIChild.Show();
	}
}
class DrawingForm : Form
{
	Point drwStart = new Point();
	Point selStart  = new Point();
	Point selEnd = new Point();
	Pen sPen  = new Pen(Color.Black);
	ArrayList drwData = new ArrayList();
	
	bool drawing = false;
	
	
	
	public DrawingForm()
	{
		this.Text = "Unnamed.sqr";
		this.BackColor = Color.White;
		this.ClientSize = new Size(400, 400);
		this.MouseDown += new MouseEventHandler(OnMouseDown);
		this.MouseUp	 += new MouseEventHandler(OnMouseUp);
		this.MouseMove += new MouseEventHandler(OnMouseMove);
		
		sPen.DashStyle = System.Drawing.Drawing2D.DashStyle.Dash;

	}
	protected override void OnPaint(PaintEventArgs pea)
	{
		pea.Graphics.DrawRectangle(sPen, selStart.X, selStart.Y, selEnd.X, selEnd.Y);
		foreach (RectData r in drwData)
		{
			pea.Graphics.DrawRectangle(Pens.Black, r.Start.X, r.Start.Y, r.End.X, r.End.Y);
		}
	}
	protected void OnMouseDown(object obj, MouseEventArgs mea)
	{
		if (mea.Button == MouseButtons.Left)
		{
			drawing = true;
			drwStart.X = mea.X;
			drwStart.Y = mea.Y;
		}
	}
	protected void OnMouseMove(object obj, MouseEventArgs mea)
	{	
		if(drawing)
		{
			selStart = drwStart;
					
			if (mea.X < selStart.X)
			{
				selEnd.X = selStart.X - mea.X;
				selStart.X = mea.X;
			}
			else	selEnd.X = mea.X - drwStart.X;
			if (mea.Y < selStart.Y)
			{
				selEnd.Y = selStart.Y - mea.Y;
				selStart.Y = mea.Y;
			}
			else	selEnd.Y = mea.Y - drwStart.Y;
			Graphics grfx = this.CreateGraphics();
			Invalidate();
			grfx.Dispose();
		}
	}
	protected void OnMouseUp(object obj, MouseEventArgs mea)
	{
		RectData t = new RectData();
		Graphics grfx = this.CreateGraphics();
		if(drawing)
		{
			t.Start = selStart;
			t.End   = selEnd;
			drwData.Add(t);
			grfx.DrawRectangle(Pens.Black, t.Start.X, t.Start.Y, t.End.X, t.End.Y);
			drawing = false;
		}
		grfx.Dispose();
	}
}
struct RectData
{
	public Point Start;
	public Point End;
	public RectData(Point s, Point e)
	{
		Start = s;
		End   = e;
	}
}

Жду комментариев критики и тп, потому как мне самому интересно, что я мог сделать не так, и как это в реале организуецца.
  • 0

#11 Guest_visionland_*

Guest_visionland_*
  • Гость

Отправлено 14 Ноябрь 2007 - 10:00

ЛАБОРАТОРНАЯ РАБОТА №1
“Создание Windows-приложений. Обработка событий мыши. Вывод текста в окно.”


Задание.

1. Ознакомиться со средой проектирования Visual Studio.NET
2. Создать простейшее приложение средствами Studio.NET.
3. Изменить размеры окна приложения, цвет фона и заголовок.
4. Реализовать обработку щелчка левой и правой кнопки мыши. По левой кнопке - выводить координаты курсора мыши в точке его нахождения. По правой – отображать диалоговое окно с сообщением «Нажата правая кнопка мыши» и очищать окно приложения от надписей.

Краткая справка.

В состав среды проектирования Microsoft Visual Studio.NET встроены средства, облегчающие программисту разработку приложений. Данная среда позволяет быстро создавать шаблоны новых приложений. При этом программисту не приходится писать ни одной строчки кода. Достаточно ответить на ряд вопросов, касающихся того, какое приложение требуется создать, и исходные тексты шаблона приложения вместе с файлами будут готовы.

Генерируемый средой Visual Studio.NET каркас стандартного приложения Windows содержит ряд классов. Класс формы (Form1) предназначен для создания интерфейса и программирования функциональности приложения. Соответственно, прежде всего с ним работает разработчик приложения Windows.
C формой можно работать в режиме дизайна и в режиме кодирования. В режиме дизайна доступна панель настраиваемых свойств формы (Properties), которая активизируется через команду меню, вызываемого по щелчку правой кнопкой мыши в области формы.
Используя свойства, доступные в панели свойств, можно определить положение, размер, цвет и особенности управления для создаваемого окна. Свойство Text позволяет изменить заголовок окна. Свойства Size и DesktopLocation задают размер и положение окна при его отображении. Свойство ForeColor служит для указания цвета переднего плана по умолчанию для всех элементов управления, размещенных в форме. Свойства BorderStyle, MinimizeBox и MaximizeBox определяют, можно ли будет свернуть, развернуть или изменить размер формы во время исполнения программы.
Для каждого свойства, изменяемого в панели свойств, создается соответствующий код. Он помещается в файл Form1.Designer.cs, в секцию, отмеченнуя как Windows Form Designer generated code. Можно раскрыть ее и просмотреть сгенерированный код.
Программы Windows, основанные на графическом интерфейсе пользователя, управляются событиями. С# выполняет функции обработки сообщений с помощью специальных функций - делегатов. Помимо методов и свойств формы содержат коллекции обработчиков событий. Если требуется обрабатывать событие, то вы должны выбрать в панели свойств формы закладку «Events» и двойным щелчком по пустой ячейке, расположенной справа от имени интересующего события, сгенерировать шаблон функции-обработчика события.
Некоторые события формы и элементов управления:


Click
Возникает при щелчке мыши
DoubleClick
Возникает при двойном щелчке мыши

KeyDown Возникает при нажатии клавиши
KeyUp Возникает при отпускании клавиши
MouseDown
Происходит, когда нажимается кнопка мыши, а указатель мыши
находится над объектом

MouseEnter Возникает, когда указатель мыши попадает в область объекта

MouseLeave Возникает, когда указатель мыши покидает область объекта
MouseMove
Возникает при перемещении мыши над объектом
MouseUp Возникает при отпускании кнопки мыши в области объекта
Resize Возникает при изменении размера объекта

Обработчик события получает два аргумента – ссылку на объект, к которому относится событие, и дополнительную информацию о событии (тип EventArgs или производный от него).
Обработчики событий от мыши получают в качестве второго аргумента объект типа MouseEventArgs.

Свойства, определенные в классе MouseEventArgs:

Button Позволяет получить информацию о том, какая кнопка мыши нажата (в виде значений перечисления MouseButtons)
Clicks Позволяет получить информацию о том, сколько раз нажата и отпущена кнопка мыши
Delta Позволяет получить информацию (в виде положительного или отрицательного числового значения) о повороте колесика мыши
X Позволяет получить координату X для указателя мыши во время щелчка
Y То же самое для координаты Y

Операции рисования и вывода текста инкапсулирует класс System.Drawing.Graphics. В нём присутствуют методы для отображения линий, кривых, строк и других графических элементов.
Для выполнения вывода на экран в методах класса формы требуется предварительно получить объект Graphics. Это обеспечивается добавлением в метод следующей строки:

Graphics g = CreateGraphics();

Текстовые строки в C# хранятся в объектах типа string.
Для вывода текста в окно необходимо объявить переменную этого типа, проинициализировать её и передать методу DrawString класса Graphics.
Например:
string s = "Hello, World!";
g.DrawString(s, new Font("Times New Roman", 8),
new SolidBrush(Color.Black), new Point(100, 200);

В операции вывода строки дополнительно указываются три объекта типов Font, SolidBrush и PointF, задающие соответственно шрифт, ипользуемый для вывода, цвет шрифта и координаты точки привязки выводимого текста.
Со строками типа string можно выполнять операцию сложения, задаваемую знаком "+ ".
Числовые типы языка C# можно переводить в строковое представление вызовом для них функции toString.
Например:
string s = e.X.ToString();


Рекомендации

Для выполнения пункта 2 задания создайте проект типа Windows Application, выбрав пункт меню File | New | Project | Visual C# | Windows. В поле Location окна «New Project» укажите путь к папке, рекомендованной для сохранения ваших проектов. Нажмите кнопку “OK”.
Для выполнения пункта 3 следует в панели свойств формы задать значения свойств BackColor, Size, Text. Следует присвоить этим полям значения, задающие соответственно белый цвет, размер 600x450 и имя, которое вы считаете подходящим для разрабатываемого вами графического редактора, функции которого будут реализовываться в дальнейших лабораторных работах.
Для выполнения пункта 4 задания необходимо добавить к классу Form1 обработчик события MouseDown в соответствии с информацией, изложенной в справке к работе.
Для различения нажатий на левую и правую кнопки мыши следует проверять значение поля Button аргумента MouseEventArgs.
Если оно равно MouseButtons.Left, то была нажата левая кнопка, если MouseButtons.Right – правая.
Пример выражения проверки:
if (e.Button == MouseButtons.Left)

Диалоговое окно с сообщением создаётся с помощью функции MessageBox.Show(), которой передаётся два аргумента - строка выводимого в окне текста и строка заголовка окна.
Для очистки окна следует вызвать через объект типа Graphics функцию Clear(), передав ей в качестве аргумента значение цвета Color.White .

:unsure: видео уроки C# можно найти на www.faippi.narod.ru / видео...

Сообщение изменено: visionland (14 Ноябрь 2007 - 10:03 )


#12 SmokEr

SmokEr
  • Пользователь
  • 119 сообщений

Отправлено 14 Ноябрь 2007 - 10:15

Это совсем несерьёзно, мог бы и сам сделать.

З.Ы. А где рекомендации и пояснения к первому заданию??
  • 0

#13 Aproken

Aproken
  • Новобранец
  • 2 сообщений

Отправлено 09 Июль 2009 - 12:11

Ого, в моем универе те же лабы требуются. Я вот сейчас делаю 1-ую про "...Рисование прямоугольников под управлением мыши".

У меня вопрос в обработке события мыши MouseMove:

"При перемещении мыши следует проверять флаг рисования, и если он установлен, следует рисовать промежуточный пунктирный контур прямоугольника"

		bool doDraw = false;
		int start_downX;
		int start_downY;
		int end_downX;
		int end_downY;

	  
		private void Form2_MouseDown(object sender, MouseEventArgs e)
		{
			Graphics g = CreateGraphics();
			if (e.Button == MouseButtons.Left)
			{
				start_downX = e.X;
				start_downY = e.Y;
			}

			if (e.Button == MouseButtons.Right)
			{
				g.Clear(Color.White);
				MessageBox.Show("Нажата правая кнопка мыши");
			}
		}

		private void Form2_MouseMove(object sender, MouseEventArgs e)
		{
			if (doDraw)
			{
				doDraw = true;
				Graphics g = Graphics.FromHwnd(this.Handle);
				pen.DashStyle = System.Drawing.Drawing2D.DashStyle.Dash;
				Rectangle r = Rectangle.FromLTRB(start_downX, start_downY, Width, Height);
			} 
		}

		private void Form2_MouseUp(object sender, MouseEventArgs e)
		{
			
			doDraw = false;
		}
	}
}

Не понимаю, как быть с конечными координатами?
Заранее благодарна!
  • 0

#14 Mr. D

Mr. D
  • Пользователь
  • 77 сообщений

Отправлено 10 Июль 2009 - 14:14

Aproken, что за универ такой?)
  • 0
I'm not a magician - I can't fix stupid.

#15 Aproken

Aproken
  • Новобранец
  • 2 сообщений

Отправлено 10 Июль 2009 - 20:39

Политехнический :rolleyes:

Кто-нибудь поможет? А то чет не получается. Пытаюсь разобраться с примером от SmokEr, но пока ноль :unsure:
  • 0

#16 Mr. D

Mr. D
  • Пользователь
  • 77 сообщений

Отправлено 15 Июль 2009 - 23:42

Aproken, А книжку открыть не попробовать, нет?
  • 0
I'm not a magician - I can't fix stupid.

#17 Goldocding

Goldocding
  • Новобранец
  • 5 сообщений

Отправлено 26 Ноябрь 2011 - 17:31

Вот программулина по рисованию на WPF.(рисует окружность, эллипс, треугольник) Думаю начинающим подойдет для изучения.
  • 0