Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/40: Рейтинг темы: голосов - 40, средняя оценка - 4.80
3 / 2 / 1
Регистрация: 28.05.2010
Сообщений: 121

Динамическое создание PictureBox при клике мышью по форме

25.12.2010, 21:14. Показов 7645. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Сегодня решил спросить. А можно сделать так чтобы при каждом нажатии мыши на форме создавался новый pictureBox и делал какое-то действие(двигался)?
Как это реализовать? Знаю что нужно создать класс... но как... не знаю...
Спасибо за ответ...
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.12.2010, 21:14
Ответы с готовыми решениями:

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

Как создать кнопку или поле ввода при клике мышью на форме? - C#
Привет, требуется помощь с лабкой, задание 3 курса универа, с# только начали учить в этом семестре.Не могу понять даже с чего начать....

Создание TextBox при клике по форме
Хочу чтобы при клике лкм по форме, создавался текст бокс, с координатами курстора мышки. Вот мой код, только он не работает. Помогите...

11
74 / 74 / 10
Регистрация: 15.04.2009
Сообщений: 126
25.12.2010, 22:01
Цитата Сообщение от Penigina Посмотреть сообщение
Здравствуйте! Сегодня решил спросить. А можно сделать так чтобы при каждом нажатии мыши на форме создавался новый pictureBox и делал какое-то действие(двигался)?
Как это реализовать? Знаю что нужно создать класс... но как... не знаю...
Спасибо за ответ...
Поставьте, пожалуйста, конкретнее задачу, я понял что нужно создавать каждый раз pictureBox, а что еще? Двигаются все какие до этого были или как?
1
3 / 2 / 1
Регистрация: 28.05.2010
Сообщений: 121
25.12.2010, 22:12  [ТС]
Каждый новый pictureBox меняет свои координаты в таймере таким образом.

pb.Location = new Point(pb.Location.X + 2, pb.Location.Y - 2); //тоесть идёт по диагонали вверх в правую сторону.
Каждый новый pictureBox создаётся в точке (0,ClientSize.Height); (нижний левый угол)
0
 Аватар для Даталиа
10 / 10 / 1
Регистрация: 02.12.2010
Сообщений: 24
25.12.2010, 22:14
C#
1
2
3
4
5
6
7
8
9
 
//Это event твоей формы
        private void Form_MouseClick(object sender, MouseEventArgs e)
        {
            PictureBox pb = new PictureBox();// создает PictureBox 
//здесь можешь сделать то что нужно с PictureBox 
            
 
        }
1
3 / 2 / 1
Регистрация: 28.05.2010
Сообщений: 121
25.12.2010, 22:22  [ТС]
Это я знаю...
По другому никак?
0
74 / 74 / 10
Регистрация: 15.04.2009
Сообщений: 126
25.12.2010, 22:29
Цитата Сообщение от Penigina Посмотреть сообщение
Это я знаю...
По другому никак?
Счас жди, напишу)
1
3 / 2 / 1
Регистрация: 28.05.2010
Сообщений: 121
25.12.2010, 23:59  [ТС]
Жду))))
0
74 / 74 / 10
Регистрация: 15.04.2009
Сообщений: 126
26.12.2010, 00:43
Я уже сделал давно) Но борюсь с тем, что после выхода остается приложение в процесах) Еще пару минут.

Добавлено через 12 минут
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
public partial class Form1 : Form
    {
        // создаем delegate и к нему event, которые будут исполнять функцию движения.
        private delegate void MoveControlHandler(PictureBox pictureBox);
        private event MoveControlHandler _moveControl;
 
        public Form1()
        {
            InitializeComponent();
        }
 
        private void MoveControl(PictureBox pictureBox)
        {
            // работает, пока не будет закрыта программа.
            while (!this.IsDisposed) 
            {
                pictureBox.Location = new Point(pictureBox.Location.X + 2, pictureBox.Location.Y - 2);
 
                // когда картинка дойдет до вверху экрана.
                if (pictureBox.Location.Y == (0 - pictureBox.Height))
                {
                    pictureBox.Location = new Point(0, this.Height - pictureBox.Height);
                }
                // время изменения расположения картинки.
                Thread.Sleep(10);
            }
        }
 
        
        private PictureBox CreateControl()
        {
            // создаем наш pictureBox.
            PictureBox pictureBox = new PictureBox();
            // подгружаем картинку.
            pictureBox.Load("1.jpg");
            // задаем начальные координаты
            pictureBox.Location = new Point(0, this.Height - pictureBox.Height);
            // добавляем к нашей форме
            this.Controls.Add(pictureBox);
            return pictureBox;
        }
 
        private void Form1_Click(object sender, EventArgs e)
        {
            // создаем поток функции движения картинки
            new Thread(StartMove).Start(CreateControl());
        }
 
        private void StartMove(object pictureBox)
        {
            _moveControl += MoveControl;
            _moveControl.Invoke((PictureBox) pictureBox);
        }
    }
1
3 / 2 / 1
Регистрация: 28.05.2010
Сообщений: 121
26.12.2010, 00:44  [ТС]
Ок))...................
0
74 / 74 / 10
Регистрация: 15.04.2009
Сообщений: 126
26.12.2010, 00:58
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Цитата Сообщение от Penigina Посмотреть сообщение
Ок))...................
Посмотри) если че по комментариям думаю сумеешь изменить как тебе нужно=)

Добавлено через 3 минуты
Если хочешь можно и без delegate и event.

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
public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        private void MoveControl(object pictureBox)
        {
            PictureBox pb = (PictureBox) pictureBox;
            while (!this.IsDisposed)
            {
                pb.Location = new Point(pb.Location.X + 2, pb.Location.Y - 2);
                if (pb.Location.Y == -pb.Height)
                {
                    pb.Location = new Point(0, this.Height - pb.Height);
                }
                Thread.Sleep(10);
            }
        }
 
        private PictureBox CreateControl()
        {
            PictureBox pictureBox = new PictureBox();
            pictureBox.Load("1.jpg");
            pictureBox.Location = new Point(0, this.Height - pictureBox.Height);
            this.Controls.Add(pictureBox);
            return pictureBox;
        }
 
        private void Form1_Click(object sender, EventArgs e)
        {
            new Thread(MoveControl).Start(CreateControl());
        } 
    }
1
3 / 2 / 1
Регистрация: 28.05.2010
Сообщений: 121
26.12.2010, 01:05  [ТС]
У меня почему-то в обеих случаях ошибка
"Cross-thread operation not valid: Control '' accessed from a thread other than the thread it was created on."

Добавлено через 29 секунд
У меня почему-то в обеих случаях ошибка
"Cross-thread operation not valid: Control '' accessed from a thread other than the thread it was created on."
Подчёркивает "pb.Location = new Point(pb.Location.X + 2, pb.Location.Y - 2);"

Добавлено через 2 минуты
У меня почему-то в обеих случаях ошибка
"Cross-thread operation not valid: Control '' accessed from a thread other than the thread it was created on."
Подчёркивает "pb.Location = new Point(pb.Location.X + 2, pb.Location.Y - 2);"
0
74 / 74 / 10
Регистрация: 15.04.2009
Сообщений: 126
26.12.2010, 01:37
Запускай CTRL+F5)))

Добавлено через 25 минут

А если хочешь окладчиком пользоватся, то нужно как-то заменить new Point, так как в потоке нельзя создавать новые объекты или специально использовать делегат.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.12.2010, 01:37
Помогаю со студенческими работами здесь

Выделение всего текста в TextBox при клике мышью
Друзья, подскажите пожалуйста как можно реализовать выделение ВСЕГО текста в TextBox'е посредством нажатия на этот текст мышкой? Пробовал...

Динамическое создание более 200 Picturebox
Делаю визуализацию матрицы и пришло в голову делать с помощью picturebox. Идея такова, матрица состоит из 200 элементов, каждый элементы...

PictureBox при наведении и клике
Создал значит PictureBox. Создал классы, задал путь... private void pictureBox1_MouseDown(object sender, MouseEventArgs e) //кнопка в...

Динамическое создание Picturebox по одному на каждую открытую картинку
как можно сделать в панели что бы когда открыть файл нажимаешь и допустим у меня там 30 картинок. Я выбираю все и нажимаю открыть. Вот...

Изменить изображение при клике в pictureBox
Всем привет, подскажите, пожалуйста, как менять изображение одно за другим из папки посредством pictureBox при нажатии?


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG-файла с альфа-каналом с помощью библиотеки SDL3_image на Android
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью 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
Решили писать научную статью с неким РОманом
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru