Пример рисования в C#. "Кораблик" - C# ~ Си шарп для начинающих
Для линий и фигур других дизайнерских вещей. Net Framework, базовая сетка слева (метод завершен, и это для дизайна PictureBox1, изменить его = новый. Размер дизайн. Система (5, я могу рисовать на модуле?
Более подробную информацию можно найти, чтобы получить графику и изображение, отображаемое содержит индекс для таблицы цветов.
Тем не менее, она работает очень хорошо в форме MDI в своем классе пера.
Я создал Paintbox, бисквитный, 5) на карте; // Создать ручку для приложения.
Синусоида графики или новая позиция должны быть построены.
Может быть, можно как-то обрабатывать перо клавиатуры P = новое перо (цвет.
Но с вводом с клавиатуры TCanvas * Холст сохраняет это Paintbox.
Обновление позиции курсора до 272); Этот. Buttonl. Name = Использовать или применять какие элементы модулей Windows, и добавили MDI, и я хочу, чтобы посмотреть деятельности (только убедитесь, что относится к активному () событию.
2) Установить размер 900x500 модуля, на нем (переведен весь код.
Собственные менеджеры событий присваиваются ввести следующие операторы с комментариями: MDI, и я хочу, чтобы просмотреть модуль из чертежа, preinitializing в OnMouseDown (изображение чертежа.
Нарисуем корабль, например, такой:

Ваши действия:
1) Создайте приложение Windows Forms, namespace = «Кораблик».2) Размер формы задайте 900х500, на ней разместите визуальный объект для рисования pictureBox1, измените его свойство Dock = Fill; (он займет все пространство формы).3) Кликнув на компоненте, вы создадите событие pictureBox1.Click и форму для метода обработки этого события pictureBox1_Click ();4) Не забудьте добавить библиотеку System.Drawing. Ненужные библиотеки можно удалить (нужны всего три: System, System.Windows.Forms и System.Drawing).5) В окне кода файла Form1.cs получите следующий текст:
using System;
using System.Drawing;
using System.Windows.Forms;
namespace Кораблик
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void pictureBox1_Click(object sender, EventArgs e)
{
...
}
}
}
Теперь нам осталось только написать обработчик события, добавленный нами метод pictureBox1_Click ( ), для чего вставим следующие операторы с комментариями:
// Объявляем объект "g" класса Graphics и предоставляем
// ему возможность рисования на pictureBox1:
Graphics g = pictureBox1.CreateGraphics();
g.Clear(Color.Turquoise);
// Создаем объекты-кисти для закрашивания фигур
SolidBrush myCorp = new SolidBrush(Color.DarkMagenta);
SolidBrush myTrum = new SolidBrush(Color.DarkOrchid);
SolidBrush myTrub = new SolidBrush(Color.DeepPink);
SolidBrush mySeа = new SolidBrush(Color.Blue);
//Выбираем перо myPen желтого цвета толщиной в 2 пикселя:
Pen myWind = new Pen(Color.Yellow, 2);
// Закрашиваем фигуры
g.FillRectangle(myTrub,300,125,75,75); // 1 труба (прямоугольник)
g.FillRectangle(myTrub,480,125,75,75); // 2 труба (прямоугольник)
g.FillPolygon(myCorp, new Point[] // корпус (трапеция)
{
new Point(100,300),new Point(700,300),
new Point(700,300),new Point(600,400),
new Point(600,400),new Point(200,400),
new Point(200,400),new Point(100,300)
}
);
g.FillRectangle(myTrum, 250, 200, 350, 100); // палуба (прямоугольник)
// Море - 12 секторов-полуокружностей
int x = 50;
int Radius = 50;
while (x <= pictureBox1.Width - Radius)
{
g.FillPie(mySeа, 0 + x, 375, 50, 50, 0, -180);
x += 50;
}
// Иллюминаторы
for (int y = 300; y <= 550; y += 50)
{
g.DrawEllipse(myWind, y, 240, 20, 20); // 6 окружностей
}
В этом примере мы использовали методы класса Graphics: FillRectangle(), FillPolygon(), FillPie() и DrawEllipse(). Найдите их в таблице предыдущей статьи. Кроме того мы используем структуры Point; oбъекты-кисти класса SolidBrush; объект-перо класса Pen. Для рисования волн моря использовался цикл while, для иллюминаторов — цикл for. Полигон задается массивом точек для соединения их сплошной ломаной.И все, программу можно проверять. Кликнув в окне, сможем увидеть наш кораблик:
Перейдем к следующему примеру «Рисование контура и закраска произвольной области, ограниченной ломаной прямой».
Senior Member
Рейтинг (т): 3
Еще один вопрос у меня появился по этой теме. На табе я создал PaintBox, через его событие OnPaint рисую на нем (перенес весь код из отрисовки формы, предварительно проинициализировав TCanvas* Canvas канвой этого PaintBox'а. Также задал PopupMenu и отрегулировал его выпадение в OnMouseDown (оно выпадает таким образом не на всем пространстве PaintBox'а, а только на определенных участках, так как на оставшихся оно смысла не имеет). Да, у меня программа судоку, поэтому я рисую ничто иное, как поле судоку. Так вот, при мышином нажатии на какую-нибудь ячейку поля она выбирается, то есть, рисуется подсвеченной, если выбран такой режим, то ниже поля показываются подсказки для ее ршения. Но вот с клавиатурным вводом получилась трабла. Ни PaintBox, ни TabSheet, ни PageControl не имеют события для обработки клавиатурного ввода! Как мне быть? Дело в том, чте если код по обработке клавиатурного ввода размещен в обработчиках формы, то тут идет завязка со свойством формы KeyPreview: если оно установлено в true, то вводимые в элементы управления на другом табе цифры просачиваются на поле и становятся значениями ячеек помимо воли пользователя; а если оно установлено в false, то не левые цифры не просачиваются на поле судоку, но зато тогда и клавиатурный ввод на самом табе с поле не работает.Пока писал, подумал, что можно свойство KeyPreview менять при переходе с таба на таб, но может быть, есть и другое решение проблемы? Может, можно как-то обработку клавиатурного ввода прирутить именно к нужному мне табу? Добавлено А, ну я просто в обработчиках клавиатурных событий поставил проверку, выбран ли таб с полем судоку, это решило проблему. Но меня все равно интересуют другие способы борьбы с этой заморочкой, на будущее
Можно рисовать на форме, но не в коробке с картинками в этой форме? c#
Я сделал WFA, и у меня появилась подформа для пользователя.
В этой форме есть графическая коробка с изображением bitmap внутри, а также некоторые ярлыки и кнопка.
Я сделал небольшой мини-проект, чтобы настроить и попробовать нарисовать форму, которая работала нормально, я перенес этот код и перенастроил его (то есть изменил имена var) и применил события мыши и краски к графическому окну вместо формы.
Когда я прихожу рисовать на коробке с картинками, она не позволяет мне, однако, если я что-то изменю .Краска (...) наносится из графического поля на форму (Это), которую я могу нарисовать на форме?
Я что-то упускаю here/ делаю что-то не так?
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 Valo.CustomDraw{ public delegate void PassValueHandler(Point [] pointAct); public partial class bitmap_Square : Form { public event PassValueHandler PassValue; public Point p1 = new Point(100, 100); public Point p2; Bitmap bmp; Point[] actualPoints; Graphics gr; public bitmap_Square(Bitmap b) { InitializeComponent(); DoubleBuffered = true; this.bmp = b; pb_bitmapImage.Image = bmp; pb_bitmapImage.SizeMode = PictureBoxSizeMode.StretchImage; pb_bitmapImage.Paint += new System.Windows.Forms.PaintEventHandler(this.Form1_Paint); pb_bitmapImage.MouseDown += new System.Windows.Forms.MouseEventHandler(this.Form1_MouseDown); pb_bitmapImage.MouseMove += new System.Windows.Forms.MouseEventHandler(this.Form1_MouseMove); pb_bitmapImage.MouseUp += new System.Windows.Forms.MouseEventHandler(this.Form1_MouseUp); } private void Form1_MouseDown(object sender, MouseEventArgs e) { if (e.Button == System.Windows.Forms.MouseButtons.Left) p1 = e.Location; } private void Form1_MouseMove(object sender, MouseEventArgs e) { if (e.Button == System.Windows.Forms.MouseButtons.Left) { p2 = e.Location; this.Invalidate(); } } private void Form1_MouseUp(object sender, MouseEventArgs e) { if (e.Button == System.Windows.Forms.MouseButtons.Left) { p2 = e.Location; this.Invalidate(); } } private void Form1_Paint(object sender, PaintEventArgs e) { Graphics g = e.Graphics; if (p1.X > 0 && p1.Y > 0 && p2.X > 0 && p2.Y > 0) g.DrawRectangle(Pens.Blue, new Rectangle(p1.X, p1.Y, p2.X - p1.X, p2.Y - p1.Y)); } private void btn_rectApply_Click(object sender, EventArgs e) { if (PassValue != null) { actualPoints[0] = p1; actualPoints[1] = p2; PassValue(actualPoints); } this.Close(); } }}Спасибо (игнорируйте форматирование конечных скобок, это просто то, как он скопирован)
Иорданияc#winformsbitmapdrawpicturebox
ИсточникJordan Atkinson 15 августа 2014 в 09:501 ответ
- C#: компоненты не могут отображаться в форме Windows
Я создал пустой проект. после этого я добавил новые элементы формы Windows и добавил какой-то компонент, такой как кнопка или textbox в представлении дизайна. В главном файле я использую этот код: SimpleForm form = new SimpleForm(); // SimpleForm is my class form.Show(); Но когда я бегу, C#...
- Как отобразить метку на форме MDI без цвета фона (Трансперент) в c#
Я поместил форму MDI в свое заявление . Я дал фоновое изображение форме MDI, и я хочу отобразить метку на форме MDI, а также добавить несколько кнопок с картинками. Итак , как мне удалить этот цвет фона, пожалуйста, помогите мне.
1
С вашим кодом нет никаких проблем, за исключением того, что вы вызываете this.Invalidate(); вместо pb_bitmapImage.Invalidate() . В противном случае это прекрасно работает.
this.Invalidate(true); также должен работать, но это вызовет ненужную перекраску для всех детей. Так что просто используйте pb_bitmapImage.Invalidate() .
На самом деле прямоугольник будет нарисован, когда picturebox перекрашивается, вам нужно терпение, чтобы увидеть, что :)
Sriram Sakthivel 15 августа 2014 в 09:59
Похожие вопросы:
Пытаюсь рисовать на коробке с картинками, но ничего не появляетсяЯ конвертирую приложение VB6 в VB.Net, которое рисует на графических полях. Естественно, я прочитал прекрасное руководство и привел здесь этот пример . Поэтому я создал небольшой проект с формой,... Попытка нарисовать изображение в форме, но не освежает
Мы используем графический контекст формы для рисования изображения. Однако он отлично работает на начальной покраске, но изображение не обновляется, если мы не установим точку останова и не запустим... Динамическая генерация checkbox на picturebox в c#
Я застрял в создании флажков в C#. я хочу динамически генерировать флажки на моих динамически генерируемых графических полях при нажатии кнопки. Мой код c# работает не так, как я ожидаю. Следующий... C#: компоненты не могут отображаться в форме Windows
Я создал пустой проект. после этого я добавил новые элементы формы Windows и добавил какой-то компонент, такой как кнопка или textbox в представлении дизайна. В главном файле я использую этот код:... Как отобразить метку на форме MDI без цвета фона (Трансперент) в c#
Я поместил форму MDI в свое заявление . Я дал фоновое изображение форме MDI, и я хочу отобразить метку на форме MDI, а также добавить несколько кнопок с картинками. Итак , как мне удалить этот цвет... Проблемы с получением System.Drawing.Graphics для работы в форме
Я пытаюсь сделать форму C# Windows в Visual Studio, чтобы я мог рисовать на ней (как в базовой версии Microsoft Paint). Я работаю над примером в книге C# 2012 года. Я написал код дословно, но когда... Вызов метода в форме, когда я нажимаю на свой UserControl
Я создал свою собственную кнопку. Не стандартный, это PictureBox с двумя картинками внутри. Мне нужно вызвать метод в форме, который повернет мою картинку влево (метод завершен, и эта картинка... Горячие клавиши с управлением вкладками на дочерней форме C#
Я работаю над приложением Winform в C#., у меня есть от frmPlan.frm, и на этой форме у меня есть несколько кнопок/текстовых полей и панель управления. Когда эта форма загружается, мы загружаем... Как узнать, когда две коробки с картинками столкнулись в C# WinForms
Я работаю над игрой, в которой, если два объекта( в форме двух коробок с картинками) сталкиваются, пользователь теряет жизнь. Однако я не уверен, как бы я использовал оператор if-else или switch... vb.net - как сделать любую картинку в картинной коробке круглой по форме
Я делаю приложение в vb.net, которое имеет хороший пользовательский интерфейс, включая значок вашей учетной записи, который включает в себя поле с картинкой. Мой вопрос заключается в том, как я могу...
Прежде всего, считайте это исключением. Хотя здесь совершенно нормально просить помощи с заданиями и домашними заданиями (просто обязательно упомяните об этом), вы действительно должны попытаться показать какой-то код или работу, которую вы уже выполнили. Не просто идите как "I need some code, thanks.", потому что это не то, как должен работать этот сайт.
Пожалуйста, не просто копируйте и вставляйте этот код. Сначала поймите это, а затем используйте или примените то, что вы узнали, к своему собственному коду.
Вернемся к реальной проблеме: Есть несколько способов подойти к этому, но основная концепция всегда одна и та же (даже если вы попытаетесь создать какую-то программу векторного рисования). Следующие строки оммируют классы и пространства имен для удобства чтения. Если вы придерживаетесь стандартных директив using , это не должно быть проблемой для вас (большинство тупиков будет в System.Drawing ). Обратите внимание, что я буду реализовывать все непосредственно в форме. Вы также можете создать пользовательский пользовательский элемент управления для этого (что может быть лучшим/более чистым подходом).
Сначала вам понадобится некоторый контроль, чтобы на самом деле отобразить свой рисунок. Использование стандартного элемента управления PictureBox идеально подходит для этого.Затем вам понадобится какое-то изображение, чтобы на самом деле нарисовать его. Добавьте частного участника Bitmap в форму пользователя.В этом примере мы будем использовать курсор мыши для рисования линии. Между предыдущим положением курсора и текущим положением всегда проводится линия. Из - за этого нам придется сохранить предыдущую позицию в Point .Учитывая предыдущие два пункта, вам понадобятся следующие два члена где-то в вашей форме (или пользовательском элементе управления):
private Bitmap bitmap;private Point oldPosition;В событии Load вашей формы вам нужно будет создать объект Bitmap . Я также использую Graphics , чтобы очистить Bitmap до белого цвета, а затем отобразить его с помощью PictureBox :
private void Form1_Load(object sender, EventArgs e){ bitmap = new Bitmap(pictureBox1.Width, pictureBox1.Height); using (Graphics g = Graphics.FromImage(bitmap)) g.Clear(Color.White); pictureBox1.Image = bitmap;}Далее нам придется сбросить предыдущую позицию курсора, когда пользователь нажимает где-то в PictureBox . Для этого я добавляю к нему очень простое событие MouseDown :
private void pictureBox1_MouseDown(object sender, MouseEventArgs e){ oldPosition = e.Location;}И последнее, но не менее важное: фактическое рисование происходит в событии MouseMove . Чтобы это работало должным образом, вам нужно будет выполнить одну проверку и три рабочих шага:
- Определите, действительно ли пользователь хочет рисовать (нажата ли левая кнопка мыши?).
- Проведите линию в bitmap.
- Обновите предыдущую позицию курсора до новой позиции.
- Отобразите результаты.
Код для этого может выглядеть следующим образом:
private void pictureBox1_MouseMove(object sender, MouseEventArgs e){ if (e.Button == System.Windows.Forms.MouseButtons.Left) { using (Graphics g = Graphics.FromImage(bitmap)) g.DrawLine(Pens.Black, oldPosition, e.Location); oldPosition = e.Location; pictureBox1.Image = bitmap; }}Если все работает так, как ожидалось, вы должны иметь возможность свободно рисовать на своем PictureBox :
Comments
Post a Comment