Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.95/21: Рейтинг темы: голосов - 21, средняя оценка - 4.95
0 / 0 / 0
Регистрация: 11.12.2018
Сообщений: 3

Как сделать так, чтобы рисунки не исчезали с picturebox при сворачивании или сохранении?

11.12.2018, 16:56. Показов 3975. Ответов 4

Студворк — интернет-сервис помощи студентам
Здравствуйте. Есть Windows Form, в которой - PictureBox. На нем все рисуется, как перенести рисунок на Bitmap? Знаю, на контролах нельзя рисовать и тд. Теперь не знаю как переделать

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
namespace GraphicApp_v3
{
public partial class Form1 : Form
{
Bitmap bitmap;
Graphics g;
bool isPressed = false;
List list = new List();
bool flag = false;
int currentX, currentY;
 
public Form1()
{
InitializeComponent();
Bitmap bitmap = new Bitmap(pictureBox1.Width, pictureBox1.Height);
g = pictureBox1.CreateGraphics();
 
}
 
private void panel3_Paint(object sender, PaintEventArgs e)
{
 
}
 
public void Rectangle()
{
g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
Rectangle Rect = new Rectangle(currentX, currentY, 150, 75);
g.FillRectangle(Brushes.White, Rect);
g.DrawRectangle(new Pen(Color.Black, 2), Rect);
StringFormat sf = new StringFormat();
sf.Alignment = StringAlignment.Center;
sf.LineAlignment = StringAlignment.Center;
g.DrawString(textBox1.Text, new Font("Times", 12), Brushes.Black, Rect, sf);
}
 
public void Cucl()
{
Point[] points = new Point[6]
{
new Point(currentX, currentY),
new Point(currentX+50, currentY+40),
new Point(currentX+105, currentY+40),
new Point(currentX+160, currentY),
new Point(currentX+105, currentY-40),
new Point(currentX+50, currentY-40)};
g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
g.FillPolygon(Brushes.White, points);
g.DrawPolygon(new Pen(Color.Black, 2), points);
StringFormat sf = new StringFormat();
sf.Alignment = StringAlignment.Center;
sf.LineAlignment = StringAlignment.Center;
float[] data = new float[points.Length];
for (int i = 0; i < points.Length; i++)
{
data[0] = points[i].X;
data[1] = points[i].Y;
data[2] = points[i].X;
data[3] = points[i].Y;
}
g.DrawString(textBox1.Text, new Font("Times", 12), Brushes.Black, data[0]+30, data[1]+35, sf);
}
 
public void Rectangle_Naklon()
{
Point[] points = new Point[4]
{
new Point(currentX, currentY),
new Point(currentX-15, currentY+70),
new Point(currentX+140, currentY+70),
new Point(currentX+155, currentY)
};
g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
g.FillPolygon(Brushes.White, points);
g.DrawPolygon(new Pen(Color.Black, 2), points);
StringFormat sf = new StringFormat();
sf.Alignment = StringAlignment.Center;
sf.LineAlignment = StringAlignment.Center;
float[] data = new float[points.Length];
for (int i = 0; i < points.Length; i++)
{
data[0] = points[i].X;
data[1] = points[i].Y;
data[2] = points[i].X;
data[3] = points[i].Y;
}
g.DrawString(textBox1.Text, new Font("Times", 12), Brushes.Black, data[0]-80, data[1]+30, sf);
}
 
public void Uslovue()
{
Point[] points = new Point[4] { new Point(currentX,currentY), new Point(currentX + 75,currentY+50), new Point(currentX+150,currentY), new Point(currentX+75,currentY-50)};
g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
g.FillPolygon(Brushes.White, points);
g.DrawPolygon(new Pen(Color.Black, 2), points);
StringFormat sf = new StringFormat(); 
sf.Alignment = StringAlignment.Center;
sf.LineAlignment = StringAlignment.Center;
float[] data = new float[points.Length];
for (int i = 0; i < points.Length; i++)
{
data[0] = points[i].X;
data[1] = points[i].Y;
data[2] = points[i].X;
data[3] = points[i].Y;
}
g.DrawString(textBox1.Text, new Font("Times", 12), Brushes.Black, data[0], data[1]+50, sf);
}
 
public void Start_End()
{
g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
Rectangle Rect = new Rectangle(currentX, currentY, 75, 40);
g.FillEllipse(Brushes.White, Rect);
g.DrawEllipse(new Pen(Color.Black, 2), Rect);
StringFormat sf = new StringFormat();
sf.Alignment = StringAlignment.Center;
sf.LineAlignment = StringAlignment.Center;
g.DrawString("Начало", new Font("Times", 12), Brushes.Black, Rect, sf);
}
 
public void End()
{
g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
Rectangle Rect = new Rectangle(currentX, currentY, 75, 40);
g.FillEllipse(Brushes.White, Rect);
g.DrawEllipse(new Pen(Color.Black, 2), Rect);
StringFormat sf = new StringFormat();
sf.Alignment = StringAlignment.Center;
sf.LineAlignment = StringAlignment.Center;
g.DrawString("Конец", new Font("Times", 12), Brushes.Black, Rect, sf);
}
 
 
private void button1_Click(object sender, EventArgs e)
{
pictureBox1.Refresh();
}
 
private void button2_Click(object sender, EventArgs e)
{
 
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
Bitmap bitmap = new Bitmap(pictureBox1.Width, pictureBox1.Height);
pictureBox1.DrawToBitmap(bitmap, new Rectangle(0, 0, bitmap.Width, bitmap.Height));
bitmap.Save(saveFileDialog1.FileName);
 
}
}
 
 
 
private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
currentX = e.X;
currentY = e.Y;
label1.Text = currentX.ToString();
label2.Text = currentY.ToString();
}
 
private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
isPressed = true;
 
if (radioButton8.Checked == true)
{
if (flag)
{
list.Add(new Point(e.X, e.Y));
g.DrawLines(new Pen(Color.Black, 2), list.ToArray());
}
else
{
list.Add(new Point(e.X, e.Y));
flag = true;
}
if (list.Count >= 2)
{
list.Clear();
flag = false;
}
 
}
 
if (radioButton4.Checked == true)
{
if (isPressed)
{
Rectangle();
}
}
 
if (radioButton5.Checked == true)
{
if (isPressed)
{
Uslovue();
}
}
 
if (radioButton1.Checked == true)
{
if (isPressed)
{
Start_End();
}
}
 
if (radioButton2.Checked == true)
{
if (isPressed)
{
End();
}
}
 
if (radioButton3.Checked == true)
{
if (isPressed)
{
Rectangle_Naklon();
}
}
 
if (radioButton6.Checked == true)
{
if (isPressed)
{
Cucl();
}
}
}
 
private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
{
isPressed = false;
}
}
}
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
11.12.2018, 16:56
Ответы с готовыми решениями:

Как сделать так, чтобы фигура не стиралась при сворачивании окна?
Здравствуйте. Пытаюсь написать простой графический редактор и в процессе разработки возникла проблема. Если я рисую какую-нибудь фигуру, а...

XE7 как сделать так чтобы при сворачивании второй формы появился в панели задач ? а не скрылся? иконка
Здравствуйте как сделать так чтобы при сворачивании второй формы появился в панели задач? а не скрылся?

Как сделать так чтобы данные из dateTimePicker или textbox отрисовались на изображении в picturebox
Подскажите, если это возможно

4
384 / 184 / 107
Регистрация: 07.01.2016
Сообщений: 496
11.12.2018, 21:37
Layen, с самого начала рисуй на Bitmape'е.
C#
1
g = Graphics.FromImage(bitmap);
если нужно отображение, добавь отрисовку этого битмапа на контроле

C#
1
2
3
4
  private void pictureBox1_Paint(object sender, PaintEventArgs e)
        {
            e.Graphics.DrawImage(bitmap, 0, 0);
        }
0
0 / 0 / 0
Регистрация: 11.12.2018
Сообщений: 3
11.12.2018, 23:47  [ТС]
То-есть мне нужно будет заменить
C#
1
g = pictureBox1.CreateGraphics();
на
C#
1
g = Graphics.FromImage(bitmap);
, верно? Будет ли рисунок "перерисовываться", если я буду использовать одну из описанных мною функций?

Добавлено через 4 минуты
И оно не работает

Добавлено через 15 минут
Пишет System.ArgumentNullException: "Значение не может быть неопределенным. Имя параметра: image" в участке
C#
1
2
3
4
private void pictureBox1_Paint(object sender, PaintEventArgs e)
        {
            e.Graphics.DrawImage(bitmap, 0, 0);
        }
0
384 / 184 / 107
Регистрация: 07.01.2016
Сообщений: 496
12.12.2018, 00:50
Лучший ответ Сообщение было отмечено Layen как решение

Решение

Layen,
Цитата Сообщение от Layen Посмотреть сообщение
И оно не работает
конечно, ведь нет определения bitmap
C#
1
2
3
4
5
6
        public Form1()
        {
            InitializeComponent();
            bitmap = new Bitmap(pictureBox1.Width, pictureBox1.Height);
            g = Graphics.FromImage(bitmap);
        }
0
0 / 0 / 0
Регистрация: 11.12.2018
Сообщений: 3
12.12.2018, 18:12  [ТС]
Спасибо, все заработало добавив то что вы мне посоветовали +
C#
1
picturebox.Invalidae();
.Спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.12.2018, 18:12
Помогаю со студенческими работами здесь

Сделать так, чтобы на экране поочередно возникали и исчезали круг, прямоугольник и треугольник
Помогите пожалуйста! Столкнулся с задачей движения в Паскале и не знаю, что делать! Вот задание: Сделать так, чтобы на экране...

Возможно ли сделать так, чтобы кнопки появлялись и исчезали через определенный промежуток времени
Добрый день! Подскажите пожалуйста,возможно ли сделать так,чтобы кнопки появлялись и исчезали через определенный промежуток времени? ...

Как сделать так чтобы страничка при увеличения разрешения не двигалась в разные стороны, и как сделать чтобы при открытии в опере и в других браузерах
все обьекты на странице не двигались в разные стороны???

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

Рисунки на форме стираются при сворачивании
Захотел я порисовать на форме using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru