Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.88/16: Рейтинг темы: голосов - 16, средняя оценка - 4.88
0 / 0 / 1
Регистрация: 04.07.2011
Сообщений: 27
1

Перемещение фигуры мышью: как предусмотреть перерисовку

08.04.2012, 23:31. Показов 3325. Ответов 4
Метки нет (Все метки)

Здравствуйте.Столкнулся с такой проблемой.
У меня есть некое подобие шахматной доски( в том плане что некая область разбита на квадратики линиями) и нужно чтобы квадратик определенного размера перемещался за мышкой. Он и так в принципе перемещается, но оставляет не стертый след=\
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 protected override void OnMouseMove(MouseEventArgs e)
        {
            int X = Cursor.Position.X - this.Location.X; 
            int Y = Cursor.Position.Y - this.Location.Y;
 
            createRectangle(X, Y);
        }
 
      private void createRectangle(int Xn, int Yn)
        {
            System.Drawing.SolidBrush rec = new System.Drawing.SolidBrush(System.Drawing.Color.Black);
            System.Drawing.Graphics formGraphics = this.CreateGraphics();
            formGraphics.FillRectangle(rec, new Rectangle(Xn , Yn , 10 ,10 ));
            
            rec.Dispose();
            formGraphics.Dispose();
Но тут проблема в том, что не получается перерисовывать объект, каждый раз рисует новый прямоугольник и в итоге все окно закрашивается.
Пробовал Invalidate(),Refresh() но после них вообще не рисует, каким способом можно перерисовывать? Подскажите пожалуйста
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.04.2012, 23:31
Ответы с готовыми решениями:

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

Перемещение элемента управления мышью
Здравствуйте! Подскажите, как сделать перемещение элементов управления по окну мышью? Или всё...

Головоломка со спичкой: предусмотреть перемещение спички мышью
Уважаемые программисты можете помочь написать одну головоломку со спичками мне очень надо в Windows...

Как сделать перемещение нарисованной фигуры по форме
Всем добрый вечер. Подскажите как сделать перемещение нарисованной фигуры по форме? Допустим...

4
68 / 24 / 2
Регистрация: 16.05.2009
Сообщений: 73
09.04.2012, 08:57 2
на чем рисование происходит? если прям на форме - то нехорошо. используйте Image
0
0 / 0 / 1
Регистрация: 04.07.2011
Сообщений: 27
09.04.2012, 17:00  [ТС] 3
Прям на форме, как использовать Image ?

Добавлено через 2 часа 11 минут
Добавил ImageBox на форму и он стал поверх всего, можно ли как нибудь его поместить на задний план?
0
68 / 24 / 2
Регистрация: 16.05.2009
Сообщений: 73
10.04.2012, 15:17 4
правой кнопкой, BringToBack вроде
рисовать так же через Graphics. Объект только взять из Image.
что-то вроде такого:
C#
1
Graphics gr=Graphics.FromImage(pictureBox1.Image);
1
1305 / 978 / 127
Регистрация: 08.12.2009
Сообщений: 1,299
10.04.2012, 16:16 5
MiniMin, пожалуйста, не надо давать плохих советов. ну нельзя для динамической графики вручную создавать контексты.
в данном случае, рисовать как раз лучше и проще прямо на собственной (пускай это будет форма) поверхности. для этого прикрепляем обработчик события Paint у формы (или, как все обычно по уму делают, просто переопределяем его в собственном коде). рисуем квадрат в нём (координату его центра (мыши) разумно хранить в поле класса и обновлять при возникновении события MouseMove), и в MouseMove вызывать Invalidate
а, впрочем, проще было пример кинуть:
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
using System;
using System.Drawing;
using System.Windows.Forms;
 
namespace WindowsFormsApplication1 {
    public class Form1 : Form {
        [STAThread]
        static void Main() {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }
 
        private Point _currentPoint;
 
        protected override void OnPaint(PaintEventArgs e) {
            const int Radius = 25;
 
            e.Graphics.FillRectangle(Brushes.Red, new Rectangle(_currentPoint.X - Radius, _currentPoint.Y - Radius, Radius * 2, Radius * 2));
            base.OnPaint(e);
        }
 
        protected override void OnMouseMove(MouseEventArgs e) {
            _currentPoint = e.Location;
            Invalidate();
 
            base.OnMouseMove(e);
        }
 
    }
}
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.04.2012, 16:16

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Как сделать плавное перемещение нарисованной фигуры по форме?
Здравствуйте, у меня есть задача: Передвижение фигур. Вообщем выполняю её так: создаю стартовую...

Перемещение фигур мышью
помогите добавить фигуры(круг еще один прямоугольник треугольник) чтоб они перемещались мышкой...

ZedGraph. Перемещение точек мышью
Всем привет. Я хочу передвигать точки кривой мышью на ZedGraph'e Но, мне нужно разрешить...

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


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

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

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