Форум программистов, компьютерный форум, киберфорум
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. Показов 23768. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru