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

Не работает цикл перерисовки

15.03.2016, 03:08. Показов 1570. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Drawing;
 
namespace Wizard_Wars
{
    class MainForm : Form
    {
        private Image frame = Wizard_Wars.Properties.Resources.area;
        private Rectangle frameForm = new Rectangle(0, 0, 10000, 10000);
        private Timer timer = new Timer();
        private Graphics g;
        private Player player;        
 
        public MainForm()
        {
            FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
            KeyPreview = true;
            WindowState = FormWindowState.Maximized;
            TopMost = true;
            Icon = new Icon("ico.ico");
            Text = "Wizard Wars";
 
            Paint += new PaintEventHandler(MainForm_Paint);
            KeyDown += new KeyEventHandler(MainForm_KeyDown);
 
            player = new Player(400, 400);
        }
 
        private void MainForm_Paint(object Sender, PaintEventArgs e)
        {
            g = e.Graphics;
            
            StartRender();
        }
 
        private void StartRender()
        {
            timer.Tick += new EventHandler(timer_Tick);
            timer.Interval = 20;
            timer.Start();
        }
 
        private void timer_Tick(object sender, EventArgs e)
        {
            Render();
        }
 
        private void Render()
        {
            g.DrawImage(frame, frameForm);
 
            player.Render(g);
 
            g.Dispose();
        }
 
        private void StopRender()
        {
            timer.Stop();
        }
 
        private void MainForm_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Escape)
            {
                StopRender();
                Dispose();
            }
 
            if (e.KeyCode == Keys.A)
                player.Move("Left");
            if (e.KeyCode == Keys.D)
                player.Move("Right");
            if (e.KeyCode == Keys.W)
                player.Move("Up");
            if (e.KeyCode == Keys.S)
                player.Move("Down");
        }
    }
}
Собственно, при компиляции ошибок не выдает, но когда уже прога запустилась ошибка - недопустимый параметр.

************** Текст исключения **************
System.ArgumentException: Недопустимый параметр.
в System.Drawing.Graphics.CheckErrorStatus (Int32 status)
в System.Drawing.Graphics.DrawImage(Image image, Int32 x, Int32 y, Int32 width, Int32 height)
в System.Drawing.Graphics.DrawImage(Image image, Rectangle rect)
в Wizard_Wars.MainForm.Render() в E:\VS Projects\Wizard Wars\Wizard Wars\MainForm.cs:строка 54
в Wizard_Wars.MainForm.timer_Tick(Object sender, EventArgs e) в E:\VS Projects\Wizard Wars\Wizard Wars\MainForm.cs:строка 49
в System.Windows.Forms.Timer.OnTick(EventA rgs e)
в System.Windows.Forms.Timer.TimerNativeWi ndow.WndProc(Message& m)
в System.Windows.Forms.NativeWindow.Callba ck(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

Че не так то сделал? Как поправить можно?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.03.2016, 03:08
Ответы с готовыми решениями:

Событие перерисовки UserControl
Создаю свой контрол с событием readonly public bool ReadOnly { get; set; } public Color CheckColor { get; set; } ...

Очередь перерисовки GDI+
Господа, нужна ваша помощь =) Итак, имеем форму, на ней две панели. У каждой панели есть по таймеру и с интервалом в 50мс вызывается...

Цикл: как работает цикл в цикле
Не могу понять как работает цикл в цикле например: repeat begin lalalala if что-то1<>100 then begin lalalala2 ...

1
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10427 / 5157 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
15.03.2016, 09:09
luckyevil95, Вы совершенно неправильно используете Graphics.
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
    class MainForm : Form
    {
        private Image frame = Wizard_Wars.Properties.Resources.area;
        private Rectangle frameForm = new Rectangle(0, 0, 10000, 10000);
        private Timer timer = new Timer();
        private Player player;
 
        public MainForm()
        {
            FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
            KeyPreview = true;
            WindowState = FormWindowState.Maximized;
            TopMost = true;
            Icon = new Icon("ico.ico");
            Text = "Wizard Wars";
 
            Paint += new PaintEventHandler(MainForm_Paint);
            KeyDown += new KeyEventHandler(MainForm_KeyDown);
 
            player = new Player(400, 400);
 
            timer.Tick += delegate { Invalidate(); };
            timer.Interval = 20;
            timer.Start();
        }
 
        private void MainForm_Paint(object Sender, PaintEventArgs e)
        {
            Render(e.Graphics);
        }
 
        private void Render(Graphics g)
        {
            g.DrawImage(frame, frameForm);
            player.Render(g);
        }
 
        private void MainForm_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Escape)
            {
                Dispose();
            }
 
            if (e.KeyCode == Keys.A)
                player.Move("Left");
            if (e.KeyCode == Keys.D)
                player.Move("Right");
            if (e.KeyCode == Keys.W)
                player.Move("Up");
            if (e.KeyCode == Keys.S)
                player.Move("Down");
        }
    }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.03.2016, 09:09
Помогаю со студенческими работами здесь

На Главной странице не работает правильно вывод (неккоректно работает цикл)
Я создал тему с нуля. И мне нужно было чтоб на главной странице(Главная) http://www.wnero.esy.es/home/ и при заходе на сайт по...

Цикл работает неправильно, в то время как POST работает
Всем привет! Я хотел написать под php скрипт с авторизацией, брут, на своем сайте(подбор пароля). Написал код на загрузку словаря +...

Создать программу по всем 3 видам циклов...цикл с параметром,цикл с условием,цикл,и цикл с предусловием...
Найти сумму чисел 1 в квадрате до 10 c квадрате...операцию возведению в степень не использовать учесть особенности получения квадратного...

Синхронизация перерисовки контролов
Я новичек в WPF и у меня вопрос. Как перерисовать измененый контрол если его значение меняется быстро. Приведу пример из WinForm. Я меняю...

Запрет перерисовки формы
Вот кусок кода Perform(WM_SETREDRAW,0,0); for i:=0 to High(ga) do begin if ga.value<>'0' then AddEl(ga.value); ...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
Программный отбор значений справочника
Maks 21.03.2026
Установка программного отбора значений справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит предопределенное значение перечислений. Процедура. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru