Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# Windows Forms
Войти
Регистрация
Восстановить пароль
 
andreasopta
1 / 1 / 5
Регистрация: 20.01.2015
Сообщений: 44
#1

Не могу двигать объектом - C#

17.10.2015, 12:35. Просмотров 315. Ответов 4
Метки нет (Все метки)

Хотел я написать программу, которая при нажатии на кнопку создаёт синий прямоугольничек, который я могу двигать кнопками A и D , но что-то пошло не так. При нажатии на кнопку синий прямоугольник создается, но двигаться не хочет
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
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
 
namespace GameTesting1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        Label car;
 
 
        private void button1_Click(object sender, EventArgs e)
        {
            button1.Visible = false;
            GameController();
           
        }
 
        private void GameController()
        {
            car = new Label();
            car.Size = new System.Drawing.Size(40, 80);
            car.Location = new System.Drawing.Point(330, 260);
            car.BackColor = Color.FromName("blue");
            Controls.Add(car);
        }
 
        private void Form1_KeyDown(object sender, KeyEventArgs e)
        {
            Point point = new Point();
            if (e.KeyCode == Keys.D)
            {
                point = car.Location;
                point.Offset(1, 0);
                car.Location = point;
                car.Refresh();
            }
            else if (e.KeyCode == Keys.A)
            {
                point = car.Location;
                point.Offset(-1, 0);
                car.Location = point;
                car.Refresh();
            }
        }
    }
}
Добавлено через 2 минуты
Если вдруг вы увидите в моём коде костыль/говнокод, то сообщите мне об этом! Я только учусь и не знаю всех тонкостей c#.
p.s. Можете подсказать, как создать событие, которое происходит при столкновении двух label'ов?
http://www.cyberforum.ru/windows-forms/thread997937.html
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.10.2015, 12:35
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Не могу двигать объектом (C#):

Прямоугольники: нарисовать, двигать, управлять, удалять
На си шарпе нужно сделать так, чтобы из одного класса я мог создать два...

Создать кнопку которую можно двигать
using System; using System.Collections.Generic; using System.ComponentModel;...

Можно ли как то программно двигать окно, а не курсором?
Чтобы прога сама себя могла перемещать по роб столу.

pictureBox1_MouseMove как двигать линию по координатам курсора
делаю програмку в которой человек по данным графика выбирает себе значения...

Как двигать много однотипных контролов плавно
Здравствуйте! Я двигал свои label'ы через таймер по одному, но когда стал...

4
Даценд
Модератор
Эксперт .NET
4045 / 3885 / 2573
Регистрация: 20.04.2015
Сообщений: 7,060
17.10.2015, 12:41 #2
Лучший ответ Сообщение было отмечено andreasopta как решение

Решение

andreasopta,
для формы установите свойству KeyPreview значение true
1
andreasopta
1 / 1 / 5
Регистрация: 20.01.2015
Сообщений: 44
17.10.2015, 13:10  [ТС] #3
Даценд, спасибо, всё время забываю об этом.
А как на счет моего второго вопроса?
Можете подсказать, как создать событие, которое происходит при столкновении двух label'ов
допустим, у нас есть такой код и я хочу чтоб при столновении двух label'ов создавался текстбокс с надписью "you win". Как мне создать такое событие?


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.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
 
namespace GameTesting1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        Label car;
        Label labelRed;
        Timer tmr = new Timer();
 
        private void Form1_Load(object sender, EventArgs e)
        {
 
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            button1.Visible = false;
            GameController();
           
        }
 
        private void GameController()
        {
            car = new Label();
            car.Size = new System.Drawing.Size(40, 80);
            car.Location = new System.Drawing.Point(330, 260);
            car.BackColor = Color.FromName("blue");
            Controls.Add(car);
            labelRed = new Label();
            labelRed.Size = new System.Drawing.Size(40, 40);
            labelRed.Location = new System.Drawing.Point(330, 0);
            labelRed.BackColor = Color.FromName("red");
            Controls.Add(labelRed);
            tmr.Interval = 10;
            tmr.Tick += new EventHandler(tmrTick);
            tmr.Start();
 
 
        }
 
        private void Form1_KeyDown(object sender, KeyEventArgs e)
        {
            Point point = new Point();
            if (e.KeyCode == Keys.D)
            {
                point = car.Location;
                point.Offset(2, 0);
                car.Location = point;
                car.Refresh();
            }
            else if (e.KeyCode == Keys.A)
            {
                point = car.Location;
                point.Offset(-2, 0);
                car.Location = point;
                car.Refresh();
            }
        }
        
 
        void tmrTick(object sender, EventArgs e) 
        {
            Point point = labelRed.Location;
            point.Y += 1;
            if (point.Y > 400)
            point.Y=0;
            labelRed.Location = point;
        }
 
    }
}
0
Даценд
Модератор
Эксперт .NET
4045 / 3885 / 2573
Регистрация: 20.04.2015
Сообщений: 7,060
17.10.2015, 13:19 #4
Цитата Сообщение от andreasopta Посмотреть сообщение
Как мне создать такое событие?
Можно пока без события обойтись.
Для этого нужно:
1) написать булевский метод проверки пересечения прямоугольников по координатам
2) в одном из методов, перемещающих label'ы (лучше в tmrTick) добавить вызов метода проверки пересечения
3) если пересеклись - "you win"
1
andreasopta
1 / 1 / 5
Регистрация: 20.01.2015
Сообщений: 44
17.10.2015, 13:42  [ТС] #5
Даценд, спасибо!
0
17.10.2015, 13:42
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.10.2015, 13:42
Привет! Вот еще темы с решениями:

Двигать отрезок вдоль неподвижного выпуклого многоугольника
Дан неподвижный выпуклый многоугольник Дан отрезок фиксированной длины,...

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

Можно ли двигать папку/файл по рабочему столу программно?
Можно ли двигать папку/файл по рабочему столу программно? Например, файл...

При перемещении ползунка вправо двигать остальные налево и наоборот
Здравствуйте, помогите с проблемой: Создаю в форме массив trackbarов N штук....


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

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

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