Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.74/124: Рейтинг темы: голосов - 124, средняя оценка - 4.74
 Аватар для SVA
104 / 89 / 32
Регистрация: 12.07.2011
Сообщений: 623
.NET 4.x

Движение нарисованного объекта с помощью стрелок клавиатуры

14.01.2012, 23:18. Показов 23701. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите как нарисовать объект (Например Круг) и затем с помощью стрелок клавиатуры перемещать этот объект?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
14.01.2012, 23:18
Ответы с готовыми решениями:

Движение линии поверх уже нарисованного графика
Подскажите, пжлст с помощью чего можно сделать так чтоб не затирался график, который нарисован на форме. Напр. я нарисовал синусоиду...

Определение границ нарисованного объекта
Задача такова: определить границы нарисованного объекта. Пытаюсь это сделать с помощью определение и сравнения цвета пикселя, но почему-то...

Перемещение нарисованного объекта по форме мышью
В чем, собственно, проблема. Необходимо реализовать передвижение мышью нарисованной линии по форме. Я себе это представляю примерно...

12
 Аватар для Бельфегор
688 / 602 / 139
Регистрация: 08.05.2009
Сообщений: 1,098
14.01.2012, 23:27
Цитата Сообщение от PYPS Посмотреть сообщение
Подскажите как нарисовать объект (Например Круг) и затем с помощью стрелок клавиатуры перемещать этот объект?
в GDI графике по нажатию кнопки скажем в право, нарисовать обьект на пиксель правее, затем стереть предидущий шаг цветом фона.
Также можно использовать свойство Region контролов(например пикчрбокс) и менять Location
0
 Аватар для SVA
104 / 89 / 32
Регистрация: 12.07.2011
Сообщений: 623
14.01.2012, 23:31  [ТС]
А можно в коде посмотреть это?
0
Злой няш
 Аватар для I2um1
2136 / 1505 / 565
Регистрация: 05.04.2010
Сообщений: 2,881
14.01.2012, 23:38
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

По простому где-то так:
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
using System;
using System.Windows.Forms;
using System.Drawing;
 
namespace WinFormTest
{
    public partial class Form1 : Form
    {
        Rectangle rect = new Rectangle(0, 0, 100, 100);
        Pen pen = new Pen(Color.Green);
 
        public Form1()
        {
            InitializeComponent();
            this.KeyDown += new KeyEventHandler(Form1_KeyDown);
        }
 
        void Form1_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Left)
                rect.Location = new Point(rect.Left - 10, rect.Top);
            if (e.KeyCode == Keys.Right)
                rect.Location = new Point(rect.Left + 10, rect.Top);
            Refresh();
        }
 
        protected override void OnPaint(PaintEventArgs e)
        {
            Graphics g = CreateGraphics();
            g.DrawEllipse(pen, rect);
        }
    }
}
1
Эксперт .NET
 Аватар для Casper-SC
4434 / 2094 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
15.01.2012, 00:09
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Да, только вот
C#
1
Graphics g = CreateGraphics();
Вызывать каждый раз, когда перерисовывается форма, это не вариант. Graphics передаётся в аргументах.

Добавлено через 3 минуты
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
    public partial class Form1 : Form
    {
        Rectangle rect = new Rectangle(0, 0, 100, 100);
        Pen pen = new Pen(Color.Green);
 
        public Form1()
        {
            InitializeComponent();
            KeyDown += new KeyEventHandler(Form1_KeyDown);
            Paint += new PaintEventHandler(Form1_Paint);
        }
 
        void Form1_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Left)
                rect.Location = new Point(rect.Left - 10, rect.Top);
            if (e.KeyCode == Keys.Right)
                rect.Location = new Point(rect.Left + 10, rect.Top);
            Refresh();
        }
 
        void Form1_Paint(object sender, PaintEventArgs e)
        {
            e.Graphics.DrawEllipse(pen, rect);
        }
    }
Но может мигать изображение. Если много объектов будет рисоваться и двигаться.

Добавлено через 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
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
using System;
using System.Drawing;
using System.Windows.Forms;
 
namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        Graphics _gr;
        BufferedGraphics _bufferedGraphics;
        BufferedGraphicsContext _bufferedGraphicsContext;
 
        Rectangle _rect = new Rectangle(0, 0, 100, 100);
        Pen _pen = new Pen(Color.Green, 3);
 
        public Form1()
        {
            InitializeComponent();
            Size = new Size(700, 600);
            StartPosition = FormStartPosition.CenterScreen;
 
            KeyDown += new KeyEventHandler(Form1_KeyDown);
            Paint += new PaintEventHandler(Form1_Paint);
            SizeChanged += new EventHandler(Form1_SizeChanged);
 
            _bufferedGraphicsContext = BufferedGraphicsManager.Current;
            InitializeGraphics();
        }
 
        void Form1_SizeChanged(object sender, EventArgs e)
        {
            InitializeGraphics();
        }
 
        void Form1_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Left)
                _rect.Location = new Point(_rect.Left - 10, _rect.Top);
            if (e.KeyCode == Keys.Right)
                _rect.Location = new Point(_rect.Left + 10, _rect.Top);
            Refresh();
        }
 
        void Form1_Paint(object sender, PaintEventArgs e)
        {
            DrawToBuffer();
        }
 
        private void DrawToBuffer()
        {
            _bufferedGraphics.Graphics.Clear(BackColor);
            _bufferedGraphics.Graphics.DrawEllipse(_pen, _rect);
            _bufferedGraphics.Render();
        }
 
        private void InitializeGraphics()
        {
            _gr = CreateGraphics();
            _bufferedGraphics = _bufferedGraphicsContext.Allocate(_gr, ClientRectangle);
        }
    }
}
1
 Аватар для SVA
104 / 89 / 32
Регистрация: 12.07.2011
Сообщений: 623
15.01.2012, 10:44  [ТС]
а где можно почитать про рисование и перемещение объектов?
0
10 / 10 / 1
Регистрация: 01.11.2011
Сообщений: 97
15.01.2012, 10:50
Цитата Сообщение от PYPS Посмотреть сообщение
а где можно почитать про рисование и перемещение объектов?
В MSDN про всё можно почитать. Хотя не самый удобный источник, зато самый подробный.
0
15.01.2012, 22:03

Не по теме:

Цитата Сообщение от kosc Посмотреть сообщение
В MSDN про всё можно почитать. Хотя не самый удобный источник, зато самый подробный.
MSDN - это справочник, а не учебник. По большой мед.энциклопедии никто медицине не учится, и иностранные языке не по словарю изучаются... :)

1
 Аватар для SVA
104 / 89 / 32
Регистрация: 12.07.2011
Сообщений: 623
16.01.2012, 08:11  [ТС]
Не пойму, как вверх вниз перемещать объект....
Думал как то так должно быть, но что то не так...

C#
1
2
if (e.KeyCode == Keys.Up)
                rect.Location = new Point(rect.Up + 10, rect.Top);
0
 Аватар для Высокий
250 / 250 / 135
Регистрация: 09.04.2011
Сообщений: 524
16.01.2012, 08:40
rect.Up?
Вы должны изменять все теже координаты по вертикали(Top) и горизонтали(Left).
Движение вверх\вниз:
C#
1
2
3
4
if (e.KeyCode == Keys.Up)
                rect.Location = new Point(rect.Left, rect.Top - 10);
            if (e.KeyCode == Keys.Down)
                rect.Location = new Point(rect.Left, rect.Top + 10);
1
16.01.2012, 10:04

Не по теме:

Цитата Сообщение от nio Посмотреть сообщение
MSDN - это справочник, а не учебник. По большой мед.энциклопедии никто медицине не учится, и иностранные языке не по словарю изучаются...
Ну не знаю, как по мне - учить язык лучше всего в порядке вводная статья -> придумать свой проект (или взять что-нибудь с фрилансерского сайта) -> далее по справочнику

Ну это конечно после знания хотя бы одного ООП-языка.

0
1 / 1 / 0
Регистрация: 20.05.2012
Сообщений: 204
05.06.2012, 15:11
можно еще такой вопрос как сделать допустим что не круг был а определенный загруженный рисунок?
0
0 / 0 / 0
Регистрация: 27.04.2015
Сообщений: 111
08.11.2015, 14:25
Цитата Сообщение от xalf Посмотреть сообщение
можно еще такой вопрос как сделать допустим что не круг был а определенный загруженный рисунок?
Например

C#
1
2
3
4
if (e.KeyCode == Keys.Up)
                pictureBox1.Location = new Point(pictureBox1.Left, pictureBox1.Top - 10);
            if (e.KeyCode == Keys.Down)
                pictureBox1.Location = new Point(pictureBox1t.Left, pictureBox1.Top + 10);
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
08.11.2015, 14:25
Помогаю со студенческими работами здесь

Создание события Click для нарисованного объекта
Если функция, которая рисует сетку объектов using (Graphics g = this.CreateGraphics()) { ...

Движение картинки по нажатию клавиш-стрелок Left и Right
Добрый вечер всем. Пытаюсь тут осуществить управление картинкой по оси X в PictureBox, заставив её двигаться вправо-влево при помощи...

Как рисовать линию с помощью мыши, не стирая уже нарисованного
public partial class Form1 : Form { Int32 x_begin = new Int32(); Int32 y_begin = new Int32(); Int32...

Обработка нажатия стрелок клавиатуры
Мне нужно обработать события на клавиши "вверх", "вниз" "вправо","влево". Объясните пожалуйста по шагам, как это все сделать. Вот мой...

Перехват событий нажатия клавиш (стрелок клавиатуры)
Доброе время суток! Подскажите как перехватить нажатие клавиш "вверх", "вниз", "влево", "вправо" на форме, с...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru