Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/8: Рейтинг темы: голосов - 8, средняя оценка - 5.00
 Аватар для slenderface
9 / 9 / 5
Регистрация: 24.03.2014
Сообщений: 313

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

19.06.2014, 00:14. Показов 1807. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток! Нужно, чтобы изображение двигалось по принципу ярлыка на рабочем столе.
у меня имеется:
pictureBox1 - Рабочая поверхность, место, где ярлык-изображение будет свободно двигаться во всех направлениях(х, у)
pictureBox2 - Сам ярлык-изображение
Надо, чтобы ярлык-изображение можно было зажатием левой кнопки мыши, можно было его передвинуть, например сверху в низ, или слева на право чуть ниже предыдущей позиции.
Заранее огромное спасибо!!!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.06.2014, 00:14
Ответы с готовыми решениями:

Нужно дописать программу чтобы изображение двигалось по прямоугольнику
Пока оно движется только буквой Г. Код под спойлером. using System; using System.Collections.Generic; using...

Координаты ярлыка на рабочем столе
Требуется найти координаты ярлыка на рабочем столе. Слышал это можно сделать через ListView, но как не нашел. Заранее спасибо

InstallShield 2010: размещение ярлыка на рабочем столе
Всем доброго времени суток. Сразу перейду к делу. Использую InstallShield 2010 и visual Studio 2010. В принципе все классно написал...

11
 Аватар для es_
217 / 216 / 114
Регистрация: 14.01.2013
Сообщений: 459
19.06.2014, 14:31
Лучший ответ Сообщение было отмечено slenderface как решение

Решение

Вот, как-то так. если нужно будет, обработайте ситуацию при выходе ярлыка за границы..
Во-первых лучше в Disegner.cs измените немного строки, поместите рисунок- ярлык в контейнер рисунка-заставки а не в контейнер формы. Так будет удобнее работать далее.
C#
1
2
pictureBox1.Controls.Add(this.pictureBox2);
            this.Controls.Add(this.pictureBox1);
Обработчики событий, их, разумеется, нужно будет в VisualStudio добавить или вручную описать в Disigner.cs
C#
1
2
3
this.pictureBox2.MouseMove += new System.Windows.Forms.MouseEventHandler(this.pictureBox2_MouseMove);
            this.pictureBox2.MouseDown += new System.Windows.Forms.MouseEventHandler(this.pictureBox2_MouseDown);
            this.pictureBox2.MouseUp += new System.Windows.Forms.MouseEventHandler(this.pictureBox2_MouseUp);
Ну и собственно сам код:
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
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        public bool down = false;
        public int X;
        public int Y;
        private void pictureBox2_MouseMove(object sender, MouseEventArgs e)
        {
            if (down)
            {
                pictureBox2.Left = pictureBox2.Left - (X - Cursor.Position.X);
                pictureBox2.Top = pictureBox2.Top - (Y - Cursor.Position.Y);
                X = Cursor.Position.X;
                Y = Cursor.Position.Y;
            }
        }
 
        private void pictureBox2_MouseDown(object sender, MouseEventArgs e)
        {
            X = Cursor.Position.X;
            Y = Cursor.Position.Y;
            down = true;
        }
 
        private void pictureBox2_MouseUp(object sender, MouseEventArgs e)
        {
            down = false;
        }
    }
Добавлено через 10 минут
Ну и вариант с обработкой ситуации выхода за границы решил сам сделать, скучно а то)
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
       public Form1()
        {
            InitializeComponent();
        }
        public bool down = false;
        public int X;
        public int Y;
        private void pictureBox2_MouseMove(object sender, MouseEventArgs e)
        {
            if (down)
            {
                if (pictureBox2.Left - (X - Cursor.Position.X) >= (pictureBox1.Size.Width-pictureBox2.Size.Width))
                {
                    pictureBox2.Left = pictureBox1.Size.Width - pictureBox2.Size.Width;
                }
                else if (pictureBox2.Left - (X - Cursor.Position.X) <= 0)
                {
                    pictureBox2.Left = 0;
                }
                else
                {
                    pictureBox2.Left = pictureBox2.Left - (X - Cursor.Position.X);
                }
                if (pictureBox2.Top - (Y - Cursor.Position.Y) >= (pictureBox1.Size.Height - pictureBox2.Size.Height))
                {
                    pictureBox2.Top = pictureBox1.Size.Height - pictureBox2.Size.Height;
                }
                else if (pictureBox2.Top - (Y - Cursor.Position.Y) <= 0)
                {
                    pictureBox2.Top = 0;
                }
                else
                {
                    pictureBox2.Top = pictureBox2.Top - (Y - Cursor.Position.Y);
                }
                X = Cursor.Position.X;
                Y = Cursor.Position.Y;
            }
        }
 
        private void pictureBox2_MouseDown(object sender, MouseEventArgs e)
        {
            X = Cursor.Position.X;
            Y = Cursor.Position.Y;
            down = true;
        }
 
        private void pictureBox2_MouseUp(object sender, MouseEventArgs e)
        {
            down = false;
        }
1
 Аватар для slenderface
9 / 9 / 5
Регистрация: 24.03.2014
Сообщений: 313
19.06.2014, 15:33  [ТС]
es_, спасибо, но я не понял про файл десигнор.кс, не могли бы вы мне объяснить как этот файл найти?
0
 Аватар для es_
217 / 216 / 114
Регистрация: 14.01.2013
Сообщений: 459
19.06.2014, 15:45
Лучший ответ Сообщение было отмечено slenderface как решение

Решение

slenderface, Кстати я два раза неправильно его имя написал )) Designer.cs - теперь правильно)
Миниатюры
Нужно, чтобы изображение двигалось по принципу ярлыка на рабочем столе  
1
 Аватар для slenderface
9 / 9 / 5
Регистрация: 24.03.2014
Сообщений: 313
19.06.2014, 15:56  [ТС]
es_, спасибо космическое, но можно ли как то покороче? И я планирую сделать на одном пиктбоксе несколько таких ярлычков!
0
 Аватар для Spawn
995 / 893 / 354
Регистрация: 24.03.2014
Сообщений: 2,381
Записей в блоге: 2
19.06.2014, 15:57
slenderface, всё выше написанное к каждому ярлычку и будет применяться... один код на всех...
только заменить pictureBox2 на sender...
0
 Аватар для slenderface
9 / 9 / 5
Регистрация: 24.03.2014
Сообщений: 313
19.06.2014, 16:11  [ТС]
А можно я Вам свой проект дам, а вы это туда впишите? Если честно, то я нечего здесь не понимаю.(

Добавлено через 2 минуты
Ну или как то по подробнее... Пожалуйста!

Добавлено через 7 минут
С кодом в форме всё ясно, но в этом мегаресурснострашном файле... Как вписать? Я вписал и у меня очень много ошибок.
И ещё. Настоящие имена файлов:

pictureBox2 - Рабочая поверхность, место, где ярлык-изображение будет свободно двигаться во всех направлениях(х, у)
pictureBox9 - Сам ярлык-изображение, и он будет не один.


Добавлено через 1 минуту
0
Эксперт .NET
 Аватар для Wolfdp
3790 / 1767 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
19.06.2014, 19:55
Цитата Сообщение от es_ Посмотреть сообщение
Во-первых лучше в Disegner.cs измените немного строки
Там в самом файле пишут, чтобы его никто не трогал руками, ибо это "автоматически генерируемый код". Подвините в визуальном редакторе кнопку на два пиксле и все ваши изменения канут в лету.

Цитата Сообщение от slenderface Посмотреть сообщение
Ну или как то по подробнее... Пожалуйста!
C#
1
private void pictureBox2_MouseMove(object sender, MouseEventArgs e)
pictureBox2_MouseMove -- обработчик события перемещения мыши. sender -- это "кто послал это событие". Т.к. мы знаем, что отправитель это класс РictureBox, то мы можем смело кастануть к нему.

C#
1
2
3
4
5
6
7
8
9
10
11
        private void pictureBox2_MouseMove(object sender, MouseEventArgs e)
        {
            if (down)
            {
                PictureBox pb = sender as PictureBox;
                pb.Left = pb.Left - (X - Cursor.Position.X);
                pb.Top = pb.Top - (Y - Cursor.Position.Y);
                X = Cursor.Position.X;
                Y = Cursor.Position.Y;
            }
        }
И так для всех обработчиков.

Дале, для все остальных "иконок" тоже просто подписываемся на нужные события и всё.

C#
1
2
3
4
5
6
7
8
9
10
11
pictureBox2.MouseMove += pictureBox2_MouseMove;
pictureBox2.MouseDown += pictureBox2_MouseDown;
pictureBox2.MouseUp += pictureBox2_MouseUp;
 
pictureBox3.MouseMove += pictureBox2_MouseMove;
pictureBox3.MouseDown += pictureBox2_MouseDown;
pictureBox3.MouseUp += pictureBox2_MouseUp;
 
pictureBox4.MouseMove += pictureBox2_MouseMove;
pictureBox4.MouseDown += pictureBox2_MouseDown;
pictureBox4.MouseUp += pictureBox2_MouseUp;
P.S. По хорошему нужно движение мыши по иконке пробрасывать дальше на нижнее изображение, а в методе MouseMove обрабатывать текущий захваченый элемент (подсказка -- его можно хранить в дополнительной переменной, например PictureBox currentPictureBox, и задавать при клику по иконке).
1
 Аватар для slenderface
9 / 9 / 5
Регистрация: 24.03.2014
Сообщений: 313
19.06.2014, 20:03  [ТС]
Wolfdp, спасибо, но объясните пожалуйста Ваш скрипт.
C#
1
2
3
4
5
6
7
8
9
10
11
private void pictureBox2_MouseMove(object sender, MouseEventArgs e)
        {
            if (down)
            {
                PictureBox pb = sender as PictureBox;
                pb.Left = pb.Left - (X - Cursor.Position.X);
                pb.Top = pb.Top - (Y - Cursor.Position.Y);
                X = Cursor.Position.X;
                Y = Cursor.Position.Y;
            }
        }
Просто с этим я работаю в СИ первый раз, и вообще изучаю язык только три недели!
0
Эксперт .NET
 Аватар для Wolfdp
3790 / 1767 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
19.06.2014, 20:06
C#
1
2
3
4
5
6
7
if (down) // если мы нажали на иконку
{
    PictureBox pb = sender as PictureBox; // приводим отправителя к типу PictureBox
    pb.Left = pb.Left - (X - Cursor.Position.X); // меняем позицию по х
    pb.Top = pb.Top - (Y - Cursor.Position.Y); // меняем позицию по у
    X = Cursor.Position.X; // запоминаем текущий х
    Y = Cursor.Position.Y; // запоминаем текущий у
0
 Аватар для slenderface
9 / 9 / 5
Регистрация: 24.03.2014
Сообщений: 313
19.06.2014, 20:13  [ТС]
Wolfdp, Спасибо большое, только как программа узнаёт кто такой PictureBox pb, откуда он знает что PictureBox pb это мой PictureBox2?
0
Эксперт .NET
 Аватар для Wolfdp
3790 / 1767 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
19.06.2014, 20:15
slenderface, вперед к изучению
http://msdn.microsoft.com/ru-r... 10%29.aspx
http://msdn.microsoft.com/ru-r... 7sbea.aspx
http://msdn.microsoft.com/ru-r... ftdfh.aspx
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.06.2014, 20:15
Помогаю со студенческими работами здесь

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

«Панель управления» на рабочем столе без использования ярлыка
как сделать доступной «Панель управления» на рабочем столе без использования ярлыка???????????????

Как получить путь к самому ярлыку на рабочем столе, а не к приложению этого ярлыка?
Объясняю. Пишу следующее: OpenFileDialog OpenFile1 = new OpenFileDialog(); FileStream file1 = new...

Программы не запускаются на рабочем столе, ко всем ярлыкам на рабочем столе добавляется приставка .Ink
Помогите пожалуйста, использовал рекомендованную вами программу CureIT (нашел 18 вредоносных объектов) и вылечил, но проблема с рабочим...

Создание ярлыка программы на рабочем столе и в Пуск-Программы
Здравствуйте уважаемые программисты. Есть вопрос по созданию ярлыков на рабочем столе и в меню пуск-&gt;(все) программы. Нашел на просторах...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
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 полиномов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru