Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
9 / 7 / 2
Регистрация: 06.03.2012
Сообщений: 686

Как заставить выполнить событие pictureBox_DragDrop

21.05.2023, 09:02. Показов 426. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здесь я перечисляю события для pictureBox
C#
1
2
3
4
5
6
7
8
9
10
private void AssignPictureBoxProperties(PictureBox pictureBox)
        {
            PictureBoxsDict[pictureBox.Name] = pictureBox;
            pictureBox.AllowDrop = true;
            pictureBox.DragDrop += pictureBox_DragDrop;
            pictureBox.DragEnter += pictureBox_DragEnter;//+            
            pictureBox.MouseDown += pictureBox_MouseDown;//+
            pictureBox.MouseEnter += pictureBox_MouseEnter;//+
            pictureBox.MouseLeave += pictureBox_MouseLeave;//+
        }
В Form1_Load назначаю эти события pictureBox. Вот код.
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
// Получаем массив из путей и картинок
            foreach (Control ctrl in this.Controls)
            {
                if (ctrl is System.Windows.Forms.GroupBox groupBox && groupBox.Name == "groupBox2")
                {
                    foreach (Control ctrl2 in groupBox.Controls)
                    {
                        if (ctrl2 is PictureBox PictureBox)
                        {
                            AssignPictureBoxProperties(PictureBox);
                        }
                    }
                }
                else if (ctrl is System.Windows.Forms.GroupBox groupBox1 && groupBox1.Name == "groupBox1")
                {
                    foreach (Control ctrl2 in groupBox1.Controls)
                    {
                        if (ctrl2 is PictureBox PictureBox)
                        {
                            AssignPictureBoxProperties(PictureBox);
                        }
                    }
                    foreach (Control ctrl2 in groupBox3.Controls)
                    {
                        if (ctrl2 is PictureBox PictureBox)
                        {
                            AssignPictureBoxProperties(PictureBox);
                        }
                    }
                }
            }
Почему программа не заходит в код события pictureBox_DragDrop. Хотя в других событиях код исполняется. Вот код. Прошу помощи.
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
private void pictureBox_DragDrop(object sender, DragEventArgs e)
        {
            PictureBox targetPictureBox = (PictureBox)sender;
            PictureBox pictureBox = (PictureBox)sender;
            string imagePath = pictureBox.ImageLocation;
 
            if (!string.IsNullOrEmpty(imagePath))
            {
                string imageName = Path.GetFileName(imagePath);
                pictureBox = (PictureBox)PictureBoxsDict.ElementAt(j).Value;
                var fileName = pictureBox.ImageLocation;
                string imageNameshuffledWrds = Path.GetFileName(shuffledWrds[j]);
 
                if (imageName.Equals(imageNameshuffledWrds, StringComparison.OrdinalIgnoreCase))
                {
                    e.Effect = DragDropEffects.Move;
                    Image droppedImage = (Image)e.Data.GetData(DataFormats.Bitmap);
 
                    if (targetPictureBox.Image == null)
                    {
                        targetPictureBox.Image = droppedImage;
                    }
 
                    // Возможно, вам нужно использовать j в другом месте, так что оставьте эту строку, если нужно.
                     j++;
                }
                else
                {
                    e.Effect = DragDropEffects.None;
                    MessageBox.Show("Картинка под номером " + (j + 1) + " найдена неправильно. \n\nВспоминаем картинку под номером " + (j + 1));
                }
            }
            
        }
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.05.2023, 09:02
Ответы с готовыми решениями:

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

DateTimePicker как заставить не генерировать событие ValueChanged в некоторых случаях
Доброго времени, суток Господа. Подскажите пожалуйста, как заставить DateTimePicker не генерировать событие ValueChanged при нажатии на эти...

Как заставить событие MouseWheel срабатывать 1 раз на щелчок колеса?
Количество срабатываний MouseWheel содержится в системной переменной SystemInformation.MouseWheelScrollLines. В моём случае она равна 5....

3
2282 / 1598 / 400
Регистрация: 26.06.2017
Сообщений: 4,737
Записей в блоге: 1
21.05.2023, 09:38
Мне кажется, что компилятор сбивает с толку Ваш код, измените блоки if
C#
1
2
3
4
if (ctrl2 is PictureBox pb)
{
  AssignPictureBoxProperties(pb);
}
Добавлено через 2 минуты
И ещё, если один раз подписали метод на событие, то больше этого делать не нужно. Проверьте чтобы в ходе выполнения кода не производились многократные подписывания на события.
1
9 / 7 / 2
Регистрация: 06.03.2012
Сообщений: 686
21.05.2023, 09:50  [ТС]
Цитата Сообщение от Uswer Посмотреть сообщение
И ещё, если один раз подписали метод на событие, то больше этого делать не нужно. Проверьте чтобы в ходе выполнения кода не производились многократные подписывания на события.
Всё сделал. Не входит программа в это событие.
0
9 / 7 / 2
Регистрация: 06.03.2012
Сообщений: 686
21.05.2023, 09:52  [ТС]
Вот сама программа. Может легче будет искать ошибку.
Пять из десяти1.rar
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.05.2023, 09:52
Помогаю со студенческими работами здесь

как заставить работать событие gridView_DoubleClick
private void gridView6_DoubleClick(object sender, System.EventHandler e) { } вообще не срабатывает! а...

Как заставить событие MouseLeftButtonDown не срабатывать, при клике на Image
На окно (Window) повесил событие MouseLeftButtonDown для возможности перетаскивания за тело. Событие не срабатывает если нажимать на...

Как заставить работать событие в потоке
void __fastcall TForm1::Shape1MouseMove(TObject *Sender, TShiftState Shift, int X, int Y) { static int X1; static int Y1; ...

Как заставить реагировать событие на всю длину Label
Имеетя простой XAML код, созданый в Expression Blend 3. Имеем простое округлое окно (WindowStyle=none, Rectanle на всю длину и Label),...

Word - как заставить событие у Application работать всегда?
Помогите решить такую проблему, бьюсь уже далеко не первый день. Нужно, чтобы при закрытии: 1) документа; 2) оболочки Word срабатывало...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru