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

Движение объекта

05.07.2019, 20:12. Показов 4867. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Дорогие форумисты, скажите пожалуйста сложно ли сделать движение объекта (как движение шашки, т.е.: нажал на шашку, нажал на точку и она оказалась на ней) и помогите сделать пожалуйста.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
05.07.2019, 20:12
Ответы с готовыми решениями:

Движение объекта
Здравствуйте. Помогите сделать задачу: нужно чтобы круг двигался по диагонали, а потом по горизонтали (т.е скатывание его с горы скажем...

Движение объекта
Всем добрый день! Возникли проблемы при реализации движения объекта. Объект сначала движется вправо. Доходит до определенной точки и должен...

Движение объекта
Определение положения объекта по заданному маршруту Условия Маршрут движущегося объекта задан данными: <(X0,Y0), V0>, ... ...

13
549 / 480 / 315
Регистрация: 24.09.2013
Сообщений: 3,345
Записей в блоге: 1
06.07.2019, 16:50
Несложно, поместите на форме элемент pictureBox1, измените его размер, например 1х1 см. можно окрасить каким-то
цветом(свойство backColor).Когда установите код, кликните мышкой в любой точке и pictureBox1 переместится в эту точку

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Forms Code
{  
     public Form1()
        {
            InitializeComponent();
            this.MouseClick += new MouseEventHandler(Form1_MouseClick);
        }
 
 
        private void Form1_MouseClick(object sender, MouseEventArgs e)
        {
            Point p1 = new Point();
         //   p1 = MousePosition; // Or p1 = e.Location;
            p1 = e.Location;
            pictureBox1.Left = p1.X;
            pictureBox1.Top = p1.Y;
          
        }  
 
}
1
2 / 2 / 0
Регистрация: 31.05.2019
Сообщений: 158
08.07.2019, 22:11  [ТС]
Хм.. Странно. Он как магнитился к button1, так и магнитится

https://youtu.be/hZXYcIhxr8E (ссылка на видео программы)

C#
1
2
3
4
5
6
private void button7_MouseClick(object sender, MouseEventArgs e)
        {
                CursorX = e.X;
                CursorY = e.Y;
                button10.Location = new Point(e.X, e.Y);  
        }
Так для всех buttonов написано, с вашим кодом также магнитится
0
2 / 2 / 0
Регистрация: 31.05.2019
Сообщений: 158
09.07.2019, 08:15  [ТС]
Т.е. мне не надо, чтобы он двигался по форме, мне надо, что бы двигался с buttona на button
0
1341 / 920 / 265
Регистрация: 08.08.2014
Сообщений: 2,766
09.07.2019, 09:21
CyberAnonim7
разметка
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
namespace ButtonMoveExp
{
    partial class MainForm
    {
        /// <summary>
        /// Required designer variable.
        /// </summary>
        private System.ComponentModel.IContainer components = null;
 
        /// <summary>
        /// Clean up any resources being used.
        /// </summary>
        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }
 
        #region Windows Form Designer generated code
 
        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {
            this.mainLayout = new System.Windows.Forms.FlowLayoutPanel();
            this.SuspendLayout();
            // 
            // mainLayout
            // 
            this.mainLayout.Dock = System.Windows.Forms.DockStyle.Fill;
            this.mainLayout.Location = new System.Drawing.Point(0, 0);
            this.mainLayout.Name = "mainLayout";
            this.mainLayout.Size = new System.Drawing.Size(504, 481);
            this.mainLayout.TabIndex = 0;
            // 
            // MainForm
            // 
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.ClientSize = new System.Drawing.Size(504, 481);
            this.Controls.Add(this.mainLayout);
            this.Name = "MainForm";
            this.Text = "Button Move Exp";
            this.ResumeLayout(false);
 
        }
 
        #endregion
 
        private System.Windows.Forms.FlowLayoutPanel mainLayout;
    }
}
код
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
using System;
using System.Windows.Forms;
 
namespace ButtonMoveExp
{
    public partial class MainForm : Form
    {
        private const int POS_COUNT = 9;
        private Button btn;
 
        public MainForm()
        {
            InitializeComponent();
 
            while (mainLayout.Controls.Count < POS_COUNT)
            {
                var pos = new Button();
                pos.Width = 140;
                pos.Height = 140;
                pos.Text = (mainLayout.Controls.Count + 1).ToString();
                pos.Click += Pos_Click;
                mainLayout.Controls.Add(pos);
            }
 
            btn = new Button();
            btn.Width = 42;
            btn.Height = 42;
            btn.Text = "X";
            MoveTo(mainLayout.Controls[0] as Button);
        }
 
        private void MoveTo(Button pos)
        {
            if (btn.Parent != null)
            {
                btn.Parent.Controls.Remove(btn);
            }
 
            pos.Controls.Add(btn);
            btn.Left = (pos.Width - btn.Width) / 2;
            btn.Top = (pos.Height - btn.Height) / 2;
        }
 
        private void Pos_Click(object sender, EventArgs e)
        {
            MoveTo(sender as Button);
        }
    }
}


Добавлено через 9 минут
Цитата Сообщение от CyberAnonim7 Посмотреть сообщение
Т.е. мне не надо, чтобы он двигался по форме, мне надо, что бы двигался с buttona на button
Выше код именно про это.

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

Добавлено через 8 минут
Т.е. как-то так:
разметка
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
namespace ButtonMoveExp
{
    partial class MainForm
    {
        /// <summary>
        /// Required designer variable.
        /// </summary>
        private System.ComponentModel.IContainer components = null;
 
        /// <summary>
        /// Clean up any resources being used.
        /// </summary>
        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }
 
        #region Windows Form Designer generated code
 
        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {
            this.someUnit = new System.Windows.Forms.PictureBox();
            ((System.ComponentModel.ISupportInitialize)(this.someUnit)).BeginInit();
            this.SuspendLayout();
            // 
            // someUnit
            // 
            this.someUnit.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
            this.someUnit.Location = new System.Drawing.Point(12, 12);
            this.someUnit.Name = "someUnit";
            this.someUnit.Size = new System.Drawing.Size(42, 42);
            this.someUnit.TabIndex = 0;
            this.someUnit.TabStop = false;
            this.someUnit.Click += new System.EventHandler(this.someUnit_Click);
            // 
            // MainForm
            // 
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.ClientSize = new System.Drawing.Size(504, 481);
            this.Controls.Add(this.someUnit);
            this.Name = "MainForm";
            this.Text = "Button Move Exp";
            this.Click += new System.EventHandler(this.MainForm_Click);
            ((System.ComponentModel.ISupportInitialize)(this.someUnit)).EndInit();
            this.ResumeLayout(false);
 
        }
 
        #endregion
 
        private System.Windows.Forms.PictureBox someUnit;
    }
}
код
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
using System;
using System.Drawing;
using System.Windows.Forms;
 
namespace ButtonMoveExp
{
    public partial class MainForm : Form
    {
 
        public MainForm()
        {
            InitializeComponent();
        }
 
        private void someUnit_Click(object sender, EventArgs e)
        {
            if (someUnit.BorderStyle == BorderStyle.Fixed3D)
            {
                someUnit.BorderStyle = BorderStyle.FixedSingle;
            }
            else
            {
                someUnit.BorderStyle = BorderStyle.Fixed3D;
            }
        }
 
        private void MainForm_Click(object sender, EventArgs e)
        {
            var mouseEvent = e as MouseEventArgs;
         
            if (someUnit.BorderStyle == BorderStyle.Fixed3D)
            {
                someUnit.BorderStyle = BorderStyle.FixedSingle;
                someUnit.Location = new Point(mouseEvent.Location.X - someUnit.Width / 2, mouseEvent.Location.Y - someUnit.Height / 2);
            }
        }
    }
}
0
2 / 2 / 0
Регистрация: 31.05.2019
Сообщений: 158
09.07.2019, 23:09  [ТС]
Цитата Сообщение от kotelok Посмотреть сообщение
while (mainLayout.Controls.Count < POS_COUNT)
Ругается на то что mainLayout.Controls.Count - null, Выдает исключение: System.NullReferenceExeption

И еще System.NullReferenceException: "Ссылка на объект не указывает на экземпляр объекта."
Если честно не понимаю что за фигня
0
1341 / 920 / 265
Регистрация: 08.08.2014
Сообщений: 2,766
09.07.2019, 23:18
CyberAnonim7
Ну это вы уже подумайте, как правильно скопипастить. Ну или создайте пустую форму, разместите там контрол 'System.Windows.Forms.FlowLayoutPanel', сделайте его подстраиваемым под размеры формы и назовите 'mainLayout'. Возможно, вы ' InitializeComponent()' в конструкторе забыли, или ещё что-нибудь.
0
 Аватар для Sanya_sa
912 / 816 / 333
Регистрация: 03.02.2015
Сообщений: 5,276
Записей в блоге: 9
10.07.2019, 09:59
Вот это подойдет?
Действие на графику
0
2 / 2 / 0
Регистрация: 31.05.2019
Сообщений: 158
10.07.2019, 13:02  [ТС]
Только мне надо не удерживать и таскать по форме, а нажать на button1, который хочу переместить, нажать на button2 НА который хочу переместить и button1 перемещается на button2.

Добавлено через 7 минут
Мне кажется или кода можно поменьше:
проверить нажимали ли на button1;
да:
нажимали ли на button2;
да:
определить координаты button2;
переместить туда button1;



проверить нажимали ли на button1;
нет:
вернутся к пункту 1;
нажимали ли на button2;
нет:
ожидать;


Все что надо
0
 Аватар для Kazbek17
1483 / 938 / 454
Регистрация: 06.02.2012
Сообщений: 2,868
10.07.2019, 13:19
CyberAnonim7,
Вам уже показали первые принципы алгоритма, теперь остается включить мозг.
Вы сейчас пытаетесь сделать то, что вам не по силам. Сначала нужно начинать с того что вы можете сделать. А выше головы не стоит прыгать.
Изучить сначала:
1)Хочу перемещать элементы по форме.
2)Хочу карту для своей игры
3)Хочу чтобы нажал на это кнопку1 и переместить на кнопку2 и получить координаты и.т.п
4)Хочу и хочу....
Опыт всегда приходит в практике, но никак не в "хотелках".
Практика эта самое тяжело в освоение.
Все хотелки сами в ходе процесса отпадут, когда вы получите, какое-то понятие.

Если вы что-то хотите сделать сами, то без усилий, времени и вашей головы, никто за вас не сделает.
0
2 / 2 / 0
Регистрация: 31.05.2019
Сообщений: 158
10.07.2019, 15:55  [ТС]
Ты конечно не знаешь, но я бл 2ую неделю сижу и ничего особенного не сделал. Я искал везде в инете, в книжках, но ничего в основном толкового не нашел, только поэтому я обращаюсь сюда, для того, чтобы мне помогли. Если знаешь C# помоги или предложи материал для прочтения по C#.
0
 Аватар для Kazbek17
1483 / 938 / 454
Регистрация: 06.02.2012
Сообщений: 2,868
10.07.2019, 16:01
CyberAnonim7, Читать можно хоть что. Я еще раз повторюсь, нужна практика. Чем больше практики, тем больше знаний, а то что прочитаешь, это только предположение.
Вот готовые примеры игры шашки, берите разбирайте код, изучайте алгоритм. На этот основание и будет ваша начальная книга.
Шашки
Шашки для двоих
0
2 / 2 / 0
Регистрация: 31.05.2019
Сообщений: 158
10.07.2019, 16:24  [ТС]
Блин полностью согласен, что нужна практика, но я почти ничего не знаю, как работать, я знаю с самых азов и все...

Добавлено через 1 минуту
Не шашки сложно, мне бы просто передвижение (как у шашки)
0
 Аватар для Sanya_sa
912 / 816 / 333
Регистрация: 03.02.2015
Сообщений: 5,276
Записей в блоге: 9
10.07.2019, 17:21
Цитата Сообщение от CyberAnonim7 Посмотреть сообщение
Не шашки сложно, мне бы просто передвижение (как у шашки)
Шашка двигается в пределах поля (доски). Значит нужно создать класс описывающий поле, далее класс описывающий шашку. Далее методы в выше упомянутых классах для изменения координат шашки (в координатах поля).
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
10.07.2019, 17:21
Помогаю со студенческими работами здесь

Движение объекта по маршруту
Доброго всем время суток. Если у кого то есть возможность, помогите с решением вот такой задачки: Движение объекта по маршруту ...

Свободное движение объекта
Доброго времени суток. Помогите разобраться в следующей теме: Создается простенькая игра - в прямоугольном поле движется объект. При...

Движение объекта в ограниченном пространстве
Разработать программу, имитирующую движение одного или нескольких объектов в ограниченном пространстве. Рассмотреть случаи: а) когда объект...

Движение объекта по параболе и синусоиде
Помогите решить задачку: Нужно заставить точку двигаться 1) по параболе 2) по синусоиде Ооооочень нужно..срочно:wall: :cry:

Рандомное движение объекта по заданным траекториям
Задача: Обьект должен появиться в одном углу экрана, из этого угла он рандомно идет три других и т.д Нужно написать логику движение этого...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
YAFU@home — распределённые вычисления для математики. На CPU
Programma_Boinc 20.01.2026
YAFU@home — распределённые вычисления для математики. На CPU YAFU@home — это BOINC-проект, который занимается факторизацией больших чисел и исследованием aliquot-последовательностей. Звучит. . .
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru