Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.11.2012, 22:36   #1
Name1ess
 
Регистрация: 01.02.2012
Сообщений: 9
По умолчанию Простая рисовалка

Учусь работать с графическими примитивами, не могу понять, почему draw() не рисует линию на boxForDrawing (pictureBox):

Код:
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 Plotter
{
	public partial class PlotterForm : Form
	{
		private Bitmap DrawArea;
		public PlotterForm()
		{
			InitializeComponent();
			DrawArea = new Bitmap(boxForDrawing.Size.Width,  boxForDrawing.Size.Height);
			boxForDrawing.Image = DrawArea;			
		}

		private void PlotterForm_Load(object sender, EventArgs e)
		{
			initializeAreaForDrawing();
		}

		private void drawButton_Click(object sender, EventArgs e)
		{
			draw();
		}

                private void draw()
		{
			Graphics g = Graphics.FromImage(DrawArea);
			Pen tmpPen = new Pen(Brushes.Black, 3f);
			g.DrawLine(tmpPen, new Point(0, 0), new Point(100,100));
			g.Dispose();

		}

	        private void initializeAreaForDrawing()
		{
			// Initialize start screen
			Graphics g = Graphics.FromImage(DrawArea);
			int width = boxForDrawing.Size.Width;
			int height = boxForDrawing.Size.Height;
			Pen tmpPen = new Pen(Brushes.Black, 3f);
			g.Clear(Color.White);
			g.DrawRectangle(tmpPen, 1.5f, 1.5f, width - 3f, height - 3f);
			tmpPen.Width = 1.5f;
			// Y
			g.DrawLine(tmpPen, new Point(width / 2, 0), new Point(width / 2, height));
			// X
			g.DrawLine(tmpPen, new Point(0, height / 2), new Point(width, height / 2));
			tmpPen.Dispose();
			g.Dispose();
		}
	}
}
Name1ess вне форума Ответить с цитированием
Старый 12.11.2012, 23:01   #2
Name1ess
 
Регистрация: 01.02.2012
Сообщений: 9
По умолчанию

Если draw сделать таким:
Код:
                    private void draw()
                    {

			Graphics g = Graphics.FromImage(DrawArea);

			for (int i = 0; i < 20; i++)
			{
				DrawArea.SetPixel(50, i, Color.Black);
			}

			g.DrawImage(DrawArea, 0, 0, DrawArea.Width,
			DrawArea.Height);
			g.Dispose();
                     }
То такая простая линия рисуется с задержкой секунд в 10, почему? На первый вопрос ответа так и не нашел..
Name1ess вне форума Ответить с цитированием
Старый 14.11.2012, 18:17   #3
Name1ess
 
Регистрация: 01.02.2012
Сообщений: 9
По умолчанию

апну, все еще нужен ответ
Name1ess вне форума Ответить с цитированием
Старый 15.11.2012, 10:15   #4
masax
Форумчанин
 
Регистрация: 01.10.2008
Сообщений: 248
По умолчанию

как то странно у тебя сделано
boxForDrawing это что такое?
Контакты
skype, почта: bm@kwax.ru
masax вне форума Ответить с цитированием
Старый 15.11.2012, 13:14   #5
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

Кинь проект архивом, кто ж будет собирать проект и копипастой наполнять с форума.

И вопрос - зачем Dispose ?
phomm вне форума Ответить с цитированием
Старый 17.11.2012, 10:30   #6
Mixim
Форумчанин
 
Регистрация: 29.10.2009
Сообщений: 259
Сообщение

Цитата:
Сообщение от Name1ess Посмотреть сообщение
Учусь работать с графическими примитивами, не могу понять, почему draw() не рисует линию на boxForDrawing (pictureBox):

Код:
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 Plotter
{
	public partial class PlotterForm : Form
	{
		private Bitmap DrawArea;
		public PlotterForm()
		{
			InitializeComponent();
			DrawArea = new Bitmap(boxForDrawing.Size.Width,  boxForDrawing.Size.Height);
			boxForDrawing.Image = DrawArea;			
		}

		private void PlotterForm_Load(object sender, EventArgs e)
		{
			initializeAreaForDrawing();
		}

		private void drawButton_Click(object sender, EventArgs e)
		{
			draw();
		}

                private void draw()
		{
			Graphics g = Graphics.FromImage(DrawArea);
			Pen tmpPen = new Pen(Brushes.Black, 3f);
			g.DrawLine(tmpPen, new Point(0, 0), new Point(100,100));
			g.Dispose();

		}

	        private void initializeAreaForDrawing()
		{
			// Initialize start screen
			Graphics g = Graphics.FromImage(DrawArea);
			int width = boxForDrawing.Size.Width;
			int height = boxForDrawing.Size.Height;
			Pen tmpPen = new Pen(Brushes.Black, 3f);
			g.Clear(Color.White);
			g.DrawRectangle(tmpPen, 1.5f, 1.5f, width - 3f, height - 3f);
			tmpPen.Width = 1.5f;
			// Y
			g.DrawLine(tmpPen, new Point(width / 2, 0), new Point(width / 2, height));
			// X
			g.DrawLine(tmpPen, new Point(0, height / 2), new Point(width, height / 2));
			tmpPen.Dispose();
			g.Dispose();
		}
	}
}
В код особо не вчитывался, но помоему он должен выглядеть следующим образом:
Код:
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 Plotter
{
	public partial class PlotterForm : Form
	{
/*		private Bitmap DrawArea;*/
		public PlotterForm()
		{
			InitializeComponent();
/*			DrawArea = new Bitmap(boxForDrawing.Size.Width,  boxForDrawing.Size.Height);
			boxForDrawing.Image = DrawArea;	*/		
		}

		private void PlotterForm_Load(object sender, EventArgs e)
		{
			initializeAreaForDrawing();
		}

		private void drawButton_Click(object sender, EventArgs e)
		{
			draw();
		}

                private void draw(PictureBox MyPictureBox)
		{
			using(Graphics g = MyPictureBox.Graphics())
{
			using(Pen tmpPen = new Pen(Brushes.Black, 3f))
{
			g.DrawLine(tmpPen, new Point(0, 0), new Point(100,100));
			g.Save();//сохраняем нарисованное
}
}
		}

	
	}
}
/**/ - закомментированные участки кода
Из всех классических книг, посвященных программированию, ненавижу всего одну - русский перевод книги Роберта Седжвика-"Фундаментальные алгоритмы C++". Предпочитаю читать её в оригинале.
Mixim вне форума Ответить с цитированием
Старый 18.11.2012, 17:20   #7
Name1ess
 
Регистрация: 01.02.2012
Сообщений: 9
По умолчанию

http://rghost.ru/41650431
Тут весь проект
Name1ess вне форума Ответить с цитированием
Старый 19.11.2012, 00:48   #8
microbit
Форумчанин
 
Аватар для microbit
 
Регистрация: 26.09.2011
Сообщений: 176
По умолчанию

Refresh ?
microbit вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Рисовалка на рабочем столе Downloads Общие вопросы Delphi 10 27.06.2012 23:12
Простейшая онлайн-рисовалка на Delphi ( sockets ) Sn0wSky Обсуждение статей 2 06.12.2011 23:04
Рисовалка, Операционные системы sharick Помощь студентам 2 11.05.2011 16:41
Рисовалка на сайте П@вел HTML и CSS 2 03.04.2009 11:55
Программа рисовалка на рабочем столе в delphi Alar Общие вопросы Delphi 0 29.10.2006 20:03