Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# Windows Forms
Войти
Регистрация
Восстановить пароль
 
mappy89
2 / 2 / 2
Регистрация: 16.10.2011
Сообщений: 179
1

Ошибка при перерисовке прямоугольника

10.04.2014, 15:06. Просмотров 307. Ответов 3
Метки нет (Все метки)

Задача - при нажатию на кнопку включить таймер, в обработчике события которого должна выполняться функция Move, которая перемещает нарисованный прямоугольник:

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
public partial class Form1 : Form
    {
        int MyX = 0, MyY = 0;
        SolidBrush MyBrushOld, MyBrushNew;  //старая кисть для закрашивания пройденного участка, новая кисть - для отрисовки нового участка
        Rectangle Rect;
 
 
        PaintEventArgs MyE;
 
 
        void MyMove(int x, int y)
        {
            MyE.Graphics.FillRectangle(MyBrushOld, x,y,10,10);
            MyE.Graphics.FillRectangle(MyBrushNew, x+1, y+1, 60, 60);
        }
 
        private void Form1_Paint(object sender, PaintEventArgs e)
        {
            MyE = e;
 
           MyBrushOld = new SolidBrush(Color.LightGray);
           MyBrushNew = new SolidBrush(Color.Red);
 
           
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            timer1.Enabled = true;
 
            
        }
 
        private void timer1_Tick(object sender, EventArgs e)
        {
          MyMove(MyX++, MyY++); //двигаем квадрат по диагонали
 
        }
Компилятор при включении таймера выдаёт ошибку "Out of memory" на строке "MyE.Graphics.FillRectangle(MyBrushOld, x,y,10,10);", ткните носом в ошибку.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.04.2014, 15:06
Ответы с готовыми решениями:

Мерцает изображение при перерисовке
Прочитал много тем по данному вопросу, 2 способа включения двойной буферизации...

Мигания при перерисовке формы
Добрый день. Создаю простенький текстовый редактор. На разных этапах разработки...

Убрать мигание при перерисовке изображения
Имеется такой код перерисовки изображения private void timer1_Tick(object...

Рисование графиков: при перерисовке остаются точки
Здравствуйте! При написании своей библиотеки построения функции. Столкнулся с...

Как избежать мерцания при перерисовке Panel
Необходимо чтобы после того, как загнал все точки в список (List), их...

3
MansMI
1448 / 1157 / 549
Регистрация: 08.01.2012
Сообщений: 4,509
10.04.2014, 15:31 2
MyE.Graphics. заменить на CreateGraphics().
0
mappy89
2 / 2 / 2
Регистрация: 16.10.2011
Сообщений: 179
10.04.2014, 15:42  [ТС] 3
Поменял на:

C#
1
2
3
4
5
6
7
8
9
        Control control;
 
        Graphics MyE;
 
void MyMove(int x, int y)
        {
            MyE.FillRectangle(MyBrushOld, x,y,60,60);
            MyE.FillRectangle(MyBrushNew, x+1, y+1, 60, 60);
        }
Выдаёт ошибку при нажаитии кнопки "Object reference not set to an instance of an object."

Добавлено через 31 секунду
Можете кинуть ссыль по теме, где и когда использовать те или иные графические классы?
0
nedel
604 / 598 / 352
Регистрация: 09.04.2014
Сообщений: 1,426
Завершенные тесты: 1
10.04.2014, 16:08 4
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
public partial class Form1 : Form
    {
        int MyX = 0, MyY = 0;
        
        private void Form1_Paint(object sender, PaintEventArgs e)
        {
          SolidBrush MyBrushOld = new SolidBrush(Color.LightGray);
         SolidBrush  MyBrushNew = new SolidBrush(Color.Red);
 
            e.Graphics.FillRectangle(MyBrushOld, MyX ,MyY ,10,10);
            e.Graphics.FillRectangle(MyBrushNew, MyX +1, MyY +1, 60, 60);
 
 MyBrushOld.Dispose();
           MyBrushNew.Dispose();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            timer1.Enabled = true;
 
            
        }
 
        private void timer1_Tick(object sender, EventArgs e)
        {
MyX++; MyY++;
this.Invalidate();
        }
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.04.2014, 16:08

Как устранить мерцание при перерисовке PictureBox?
Привет. Рисую на Bitmap, а потом PictureBox'у его присваиваю. Вопрос как убрать...

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

Рисование кистью тормозит, а сама панель при её перерисовке мерцает
ребят я всё с той же проблемой обращаюсь однако я всё же реализовал рисование...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru