Добрый робот идёт на помощь, есть вопрос? Не тяни, да всю суть изложи. ChatGPT

Интересная технология? Нужна ли она нам.

  • Крутая, оставляй пока есть возможность.

    Голосов: 104 94,5%
  • Игрушка на время. Не верю я в эти технологии.

    Голосов: 6 5,5%

  • Всего проголосовало
    110
  • Опрос закрыт .

Добрый робот (ChatGPT)

Всезнайка
Лелеять и любить
Особенный
Регистрация
27 Фев 2023
Сообщения
1.995
Реакции
343
Ra
255
@Добрый робот (ChatGPT)
c#
При проверке событий вышло такое сообщение. Видно что мы получили что то не то что нам надо. Так как есть события которые программа видит и код исполняется такие как
Код:
pictureBox.DragEnter += pictureBox_DragEnter;//+
            pictureBox.MouseDown += pictureBox_MouseDown;//+
            pictureBox.MouseEnter += pictureBox_MouseEnter;//+
            pictureBox.MouseLeave += pictureBox_MouseLeave;//+
Тогда как в сообщении указано что ни Ни один метод не назначен для этого события. Хотя эти методы работают. Что делать?
Код:
Событие: DragDrop
Ни один метод не назначен для этого события.

Событие: DragEnter
Ни один метод не назначен для этого события.


Событие: MouseDown
Ни один метод не назначен для этого события.

Событие: MouseEnter
Ни один метод не назначен для этого события.

Событие: MouseLeave
Ни один метод не назначен для этого события.

.
Ваш код показывает, что у вас есть обработчики событий для pictureBox_DragEnter, pictureBox_MouseDown, pictureBox_MouseEnter и pictureBox_MouseLeave. Однако, сообщение указывает, что ни один метод не назначен для событий DragDrop, DragEnter, MouseDown, MouseEnter и MouseLeave. Это может произойти, если у вас есть несколько экземпляров pictureBox или если вы где-то переопределяете события.
Вам следует проверить следующие вещи:
  • Убедитесь, что у вас есть только один экземпляр pictureBox и что обработчики событий назначены для правильного экземпляра.
  • Убедитесь, что вы назначаете обработчики событий для правильных событий. В коде вы привели только часть кода, поэтому нам трудно сказать, где и как вы назначаете обработчики событий. Убедитесь, что вы назначаете обработчики для событий DragDrop, DragEnter, MouseDown, MouseEnter и MouseLeave.
  • Убедитесь, что имена обработчиков событий в коде совпадают с именами методов, которые вы хотите назначить в качестве обработчиков событий.
Если после проверки этих вещей проблема не решена, пожалуйста, предоставьте более полный код или больше информации о том, как вы назначаете обработчики событий, чтобы мы могли вам дальше помочь.
 

zuvl

Особенный
Спасибо от Разулы
Регистрация
1 Окт 2019
Сообщения
763
Реакции
2.553
Ra
2.722
@Добрый робот (ChatGPT)
c#
Вот код какие события назначаются
Код:
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;//+
        }
А это код как назначаются эти события
Код:
// Получаем массив из путей и картинок
            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);
                        }
                    }
                }
            }
Если код в части событий исполняется, а в одном событие нет. Что делать?
 

Добрый робот (ChatGPT)

Всезнайка
Лелеять и любить
Особенный
Регистрация
27 Фев 2023
Сообщения
1.995
Реакции
343
Ra
255
@Добрый робот (ChatGPT)
c#
Вот код какие события назначаются
Код:
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;//+
        }
А это код как назначаются эти события
Код:
// Получаем массив из путей и картинок
            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, pictureBox_DragEnter, pictureBox_MouseDown, pictureBox_MouseEnter, pictureBox_MouseLeave) определен и реализован правильно. Проверьте, есть ли эти методы в вашем коде, и убедитесь, что внутри них содержится нужная логика.
  • Проверьте, что указанные события фактически возникают для соответствующего PictureBox. Убедитесь, что вы присваиваете pictureBox_DragDrop, pictureBox_DragEnter, pictureBox_MouseDown, pictureBox_MouseEnter, pictureBox_MouseLeave только тем PictureBox, для которых они должны быть назначены.
  • Убедитесь, что назначение событий происходит после создания и добавления PictureBox в соответствующий контейнер (например, groupBox, groupBox1, groupBox3). Если события назначаются до добавления PictureBox в контейнер, они могут не срабатывать.
  • Проверьте, нет ли других факторов, которые могут препятствовать выполнению кода в событии. Например, убедитесь, что элементы управления не заблокированы (Enabled установлено на true), и что другой код или условия не мешают выполнению обработчиков событий.
Если вы проверили все вышеперечисленные аспекты и проблема остается, может потребоваться дополнительная информация или рассмотрение других частей кода для более точного определения проблемы и предоставления решения.
 

zuvl

Особенный
Спасибо от Разулы
Регистрация
1 Окт 2019
Сообщения
763
Реакции
2.553
Ra
2.722
@Добрый робот (ChatGPT)
c#
Вот этот код я выполняю в Form1_Load. Где ещё можно выполнить этот код ?
Код:
// Получаем массив из путей и картинок
            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);
                        }
                    }
                }
            }
 

Добрый робот (ChatGPT)

Всезнайка
Лелеять и любить
Особенный
Регистрация
27 Фев 2023
Сообщения
1.995
Реакции
343
Ra
255
@Добрый робот (ChatGPT)
c#
Вот этот код я выполняю в Form1_Load. Где ещё можно выполнить этот код ?
Код:
// Получаем массив из путей и картинок
            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);
                        }
                    }
                }
            }
Код, который вы предоставили, выполняется в событии Form1_Load, которое происходит при загрузке формы. Однако, в зависимости от ваших требований, этот код можно выполнить и в других местах. Вот несколько вариантов:
  • В событии Form1_Shown: Это событие происходит после того, как форма отображается на экране. Если вы хотите выполнить код после того, как форма полностью отобразилась, вы можете поместить его в событие Form1_Shown.
  • В ответ на действие пользователя: Вы также можете выполнять этот код в ответ на определенные действия пользователя, например, щелчок на кнопке или выбор определенного пункта меню. В этом случае вы должны назначить обработчик событий соответствующему элементу управления.
  • В других методах формы: Если вы хотите выполнить этот код в другом методе формы, вам просто нужно вызвать этот метод из нужного места. Например, вы можете создать отдельный метод и вызвать его в Form1_Load или в ответ на другое событие.
  • В конструкторе формы: Вы можете поместить этот код в конструктор формы (метод, имеющий то же имя, что и форма). Таким образом, код будет выполнен при создании экземпляра формы.
Пожалуйста, учтите, что место, где будет выполнен код, должно соответствовать вашим конкретным потребностям и требованиям приложения.
 

zuvl

Особенный
Спасибо от Разулы
Регистрация
1 Окт 2019
Сообщения
763
Реакции
2.553
Ra
2.722
@Добрый робот (ChatGPT)
c#
В каком событии ещё кроме события pictureBox_DragDrop можно выполнить следующий код
Код:
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++;
                }
                else
                {
                    e.Effect = DragDropEffects.None;
                    MessageBox.Show("Картинка под номером " + (j + 1) + " найдена неправильно. \n\nВспоминаем картинку под номером " + (j + 1));
                }
            }
 

Добрый робот (ChatGPT)

Всезнайка
Лелеять и любить
Особенный
Регистрация
27 Фев 2023
Сообщения
1.995
Реакции
343
Ra
255
@Добрый робот (ChatGPT)
c#
В каком событии ещё кроме события pictureBox_DragDrop можно выполнить следующий код
Код:
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++;
                }
                else
                {
                    e.Effect = DragDropEffects.None;
                    MessageBox.Show("Картинка под номером " + (j + 1) + " найдена неправильно. \n\nВспоминаем картинку под номером " + (j + 1));
                }
            }
Вы можете выполнить данный код в событии DragEnter (при перетаскивании элемента над PictureBox) для определения, будет ли эффект перетаскивания применен:csharp
Код:
private void pictureBox_DragEnter(object sender, DragEventArgs e)
{
    PictureBox targetPictureBox = (PictureBox)sender;

    // Ваш код здесь
    // ...

    // Пример применения эффекта перетаскивания
    e.Effect = DragDropEffects.Move;
}
Выполнение кода в событии DragEnter позволяет установить значение e.Effect для указания эффекта перетаскивания (например, DragDropEffects.Move), который будет отображаться, когда элемент перетаскивается над PictureBox. Это может быть полезно, чтобы показать пользователю, что перетаскивание элемента разрешено или запрещено в зависимости от определенных условий.
 

zuvl

Особенный
Спасибо от Разулы
Регистрация
1 Окт 2019
Сообщения
763
Реакции
2.553
Ra
2.722
@Добрый робот (ChatGPT)
c#
Вот весь код. Что надо сделать чтобы можно было переносить изображения при моих условиях
C#:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.Remoting.Messaging;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Xml.Linq;
using static System.Windows.Forms.VisualStyles.VisualStyleElement;
using static System.Windows.Forms.VisualStyles.VisualStyleElement.Button;

namespace Пять_из_десяти1
{
    public partial class Form1 : Form
    {
        private int j = 0;
        private List<string> shuffledWrds;
        private Dictionary<int, string> list;
        Dictionary<string, PictureBox> PictureBoxsDict = new Dictionary<string, PictureBox>();
        public Form1()
        {
            InitializeComponent();
        }


        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;//+
        }
        private void Form1_Load(object sender, EventArgs e)
        {
            // Получаем массив из путей и картинок
            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)
                            if (ctrl2 is PictureBox pb)
                            {
                            AssignPictureBoxProperties(pb);
                            //pb.DragDrop += pictureBox_DragDrop;
                            /*AssignPictureBoxProperties(PictureBox);
                            PictureBox.DragDrop += pictureBox_DragDrop;*/

                        }
                    }
                }
                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);
                        }
                    }
                }
            }


            EventInfo[] events = typeof(PictureBox).GetEvents();

            foreach (EventInfo ev in events)
            {
                Delegate eventDelegate = ev.GetRaiseMethod()?.CreateDelegate(ev.EventHandlerType);

                Console.WriteLine("Событие: " + ev.Name);

                if (eventDelegate == null)
                {
                    Console.WriteLine("Ни один метод не назначен для этого события.");
                }
                else
                {
                    Delegate[] eventHandlers = eventDelegate.GetInvocationList();
                    Console.WriteLine("Методы, назначенные для этого события:");

                    foreach (Delegate handler in eventHandlers)
                    {
                        Console.WriteLine(handler.Method.Name);
                    }
                }

                Console.WriteLine();
            }

            string[] lst = Directory.GetFiles(@"D:\\Моё программирование\\Пять из десяти1\\bin\\Debug\\Images\");           
                // Делаем из массива словарь(коллекцию)
                int i = 0;
                this.list = new Dictionary<int, string>(lst.ToDictionary(x => i++, x => x));
                // Сортируем случайным образом и выкладываем на PictureBox с 1 по 10
                Random rnd = new Random();
                var shuffledWords = list.OrderBy(x => rnd.Next(0, 10)).Select(x => x.Value).ToList();
            /*foreach (var word in shuffledWords)
            {
                //Console.WriteLine("shuffledWords" + word);
            }*/
            for (i = 0; i < list.Count; i++)
                {
                    var item = PictureBoxsDict.ElementAt(i);
                    ((PictureBox)item.Value).Image = null;
                    ((PictureBox)item.Value).ImageLocation = shuffledWords[i];
                ((PictureBox)item.Value).Tag = Path.GetFileName(shuffledWords[i]);
            }
                // Сортируем случайным образом второй раз и выкладываем на PictureBox с 10 по 15
                rnd = new Random();
                 shuffledWrds = list.OrderBy(x => rnd.Next(0, list.Count)).Select(x => x.Value).ToList();
            /*foreach (var word in shuffledWrds)
            {
                Console.WriteLine("shuffledWrds" + word);
            }*/
            for (i = 14; i > 9; i--)
                {
                    var item = PictureBoxsDict.ElementAt(i);
                        ((PictureBox)item.Value).Image = null;
                        ((PictureBox)item.Value).ImageLocation = shuffledWrds[14-i];
                ((PictureBox)item.Value).Tag = Path.GetFileName(shuffledWrds[14-i]);
            }

                groupBox2.Visible = false;
                groupBox3.Visible = false;
            //}
        }

        private void pictureBox_MouseEnter(object sender, EventArgs e)
        {
            PictureBox pictureBox = (PictureBox)sender;
            if (pictureBox != null && pictureBox.Tag != null)
            {
                string imageName = pictureBox.Tag.ToString();
                System.Windows.Forms.ToolTip tooltip = new System.Windows.Forms.ToolTip();
                tooltip.SetToolTip(pictureBox, imageName);
            }
            /*string imageName = pictureBox.Tag.ToString();

            System.Windows.Forms.ToolTip tooltip = new System.Windows.Forms.ToolTip();
            tooltip.SetToolTip(pictureBox, imageName);*/
        }

        private void pictureBox_MouseLeave(object sender, EventArgs e)
        {
            PictureBox pictureBox = (PictureBox)sender;

            System.Windows.Forms.ToolTip tooltip = new System.Windows.Forms.ToolTip();
            tooltip.RemoveAll();
        }

        // Обработчик события MouseDown для исходного PictureBox
        private void pictureBox_MouseDown(object sender, MouseEventArgs e)
        {
            /*PictureBox pictureBox = (PictureBox)sender;
            string imagePath = pictureBox.ImageLocation;

            if (!string.IsNullOrEmpty(imagePath))
            {
                string imageName = Path.GetFileName(imagePath);// Получаем имя изображения
                pictureBox = (PictureBox)PictureBoxsDict.ElementAt(j + 10).Value;
                var fileName = pictureBox.ImageLocation;
                string imageNameshuffledWrds = Path.GetFileName(shuffledWrds[j]);

                if (imageName == imageNameshuffledWrds)
                {
                    MessageBox.Show("Картинка под номером " + (j + 1) + " найдена. \n\nИщем картинку под номером " + (j + 2));
                    j++;
                }
            }*/

            // Проверяем, что нажата левая кнопка мыши
            if (e.Button == MouseButtons.Left)
            {
                PictureBox sourcePictureBox = (PictureBox)sender;

                // Проверяем, что исходный PictureBox содержит изображение
                if (sourcePictureBox.Image != null)
                {
                    // Запоминаем изображение во временной переменной и удаляем его из исходного PictureBox
                    Image draggedImage = sourcePictureBox.Image;
                    //sourcePictureBox.Image = null;

                    // Начинаем операцию перетаскивания изображения
                    sourcePictureBox.DoDragDrop(draggedImage, DragDropEffects.Move);
                }
            }
        }
        /*Этот код определяет метод обработчика событий с именем PictureBox_DragDrop, который запускается при выполнении
         операции перетаскивания объекта PictureBox. Вот что делает код:
        Он приводит параметр sender к объекту PictureBox и присваивает его целевой переменной.
        Он проверяет, относятся ли перетаскиваемые данные к типу PictureBox, используя метод GetDataPresent
        объекта DragEventArgs (e). Если это так, код продолжается; в противном случае он выходит из метода.
        Он приводит перетаскиваемые данные к объекту PictureBox и присваивает их исходной переменной.
        Он проверяет, являются ли источник и цель разными объектами PictureBox. Если они есть, код продолжается;
        в противном случае он выходит из метода.
        Он записывает в консоль сообщение, указывающее на операцию перетаскивания из исходного PictureBox в целевой PictureBox.
        Он вызывает метод SwapImages, передавая исходный и целевой объекты PictureBox, чтобы поменять местами их изображения
        или выполнить другие операции, связанные с изображениями.
        Он устанавливает для выбранной переменной значение null.
        Он вызывает метод SelectBox, передающий целевой объект PictureBox, чтобы выполнить какое-либо действие с выбранным полем.
        Он возвращается из метода.*/

        // Обработчик события DragDrop для целевого PictureBox
        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++;
                }
                else
                {
                    e.Effect = DragDropEffects.None;
                    MessageBox.Show("Картинка под номером " + (j + 1) + " найдена неправильно. \n\nВспоминаем картинку под номером " + (j + 1));
                }
            }*/
            /*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 + 10).Value;
                var fileName = pictureBox.ImageLocation;
                string imageNameshuffledWrds = Path.GetFileName(shuffledWrds[j]);

                if (imageName == imageNameshuffledWrds)
                {
                    e.Effect = DragDropEffects.Move; // Разрешаем перенос
                    // Получаем перетаскиваемое изображение
                    Image droppedImage = (Image)e.Data.GetData(DataFormats.Bitmap);

                    // Проверяем, что целевой PictureBox пустой
                    if (targetPictureBox.Image == null)
                    {
                        // Устанавливаем перетаскиваемое изображение в целевой PictureBox
                        targetPictureBox.Image = droppedImage;
                    }
                   // MessageBox.Show("Картинка под номером " + (j + 1) + " найдена. \n\nИщем картинку под номером " + (j + 2));
                    j++;
                }
                else
                {
                    e.Effect = DragDropEffects.None; // Запрещаем перенос
                    MessageBox.Show("Картинка под номером " + (j + 1) + " найдена неправильно. \n\nВспоминаем картинку под номером " + (j + 1));
                }


            }*/
        }

        //Обработчик события DragEnter для целевого PictureBox
private void pictureBox_DragEnter(object sender, DragEventArgs e)
        {
            PictureBox targetPictureBox = (PictureBox)sender;
           // 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++;
                }
                else
                {
                    e.Effect = DragDropEffects.None;
                    MessageBox.Show("Картинка под номером " + (j + 1) + " найдена неправильно. \n\nВспоминаем картинку под номером " + (j + 1));
                }
            }

            // Проверяем, что перетаскивается изображение
            if (e.Data.GetDataPresent(DataFormats.FileDrop))
            {
                e.Effect = DragDropEffects.Copy;
            }
            /*if (e.Data.GetDataPresent(DataFormats.Bitmap))
            {
                e.Effect = DragDropEffects.Move;
            }*/
        }

        private void проверкаToolStripMenuItem_Click(object sender, EventArgs e)
        {
            groupBox2.Visible = true;
            groupBox1.Visible = false;
            // Установить координаты и видимость GroupBox3
            this.Controls.Add(groupBox3);
            groupBox3.Location = new Point(1, 27);
            groupBox3.Visible = true;
        }

        private void подсветкаToolStripMenuItem_Click(object sender, EventArgs e)
        {
            groupBox1.Visible = true;
            groupBox3.Visible = false;
            timer1.Interval = 3000;
            timer1.Start();
        }

        private void pictureBox1_MouseEnter_1(object sender, EventArgs e)
        {
            // Получаем имя изображения из свойства Tag PictureBox
            string imageName = pictureBox1.Tag.ToString();

            // Создаем ToolTip и устанавливаем имя изображения в качестве текста
            System.Windows.Forms.ToolTip tooltip = new System.Windows.Forms.ToolTip();
            tooltip.SetToolTip(pictureBox1, imageName);
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            groupBox1.Visible = false;
            groupBox3.Visible = true;
            timer1.Stop();
        }

        private void pictureBox1_DragDrop(object sender, DragEventArgs e)
        {

        }
    }
}
 

serafim

Житель Разулы
Команда форума
Разула в сердце
Регистрация
25 Апр 2016
Сообщения
78.862
Реакции
196.541
Ra
243.716
@Добрый робот (ChatGPT)
c#
Вот весь код. Что надо сделать чтобы можно было переносить изображения при моих условиях
C#:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.Remoting.Messaging;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Xml.Linq;
using static System.Windows.Forms.VisualStyles.VisualStyleElement;
using static System.Windows.Forms.VisualStyles.VisualStyleElement.Button;

namespace Пять_из_десяти1
{
    public partial class Form1 : Form
    {
        private int j = 0;
        private List<string> shuffledWrds;
        private Dictionary<int, string> list;
        Dictionary<string, PictureBox> PictureBoxsDict = new Dictionary<string, PictureBox>();
        public Form1()
        {
            InitializeComponent();
        }


        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;//+
        }
        private void Form1_Load(object sender, EventArgs e)
        {
            // Получаем массив из путей и картинок
            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)
                            if (ctrl2 is PictureBox pb)
                            {
                            AssignPictureBoxProperties(pb);
                            //pb.DragDrop += pictureBox_DragDrop;
                            /*AssignPictureBoxProperties(PictureBox);
                            PictureBox.DragDrop += pictureBox_DragDrop;*/

                        }
                    }
                }
                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);
                        }
                    }
                }
            }


            EventInfo[] events = typeof(PictureBox).GetEvents();

            foreach (EventInfo ev in events)
            {
                Delegate eventDelegate = ev.GetRaiseMethod()?.CreateDelegate(ev.EventHandlerType);

                Console.WriteLine("Событие: " + ev.Name);

                if (eventDelegate == null)
                {
                    Console.WriteLine("Ни один метод не назначен для этого события.");
                }
                else
                {
                    Delegate[] eventHandlers = eventDelegate.GetInvocationList();
                    Console.WriteLine("Методы, назначенные для этого события:");

                    foreach (Delegate handler in eventHandlers)
                    {
                        Console.WriteLine(handler.Method.Name);
                    }
                }

                Console.WriteLine();
            }

            string[] lst = Directory.GetFiles(@"D:\\Моё программирование\\Пять из десяти1\\bin\\Debug\\Images\");          
                // Делаем из массива словарь(коллекцию)
                int i = 0;
                this.list = new Dictionary<int, string>(lst.ToDictionary(x => i++, x => x));
                // Сортируем случайным образом и выкладываем на PictureBox с 1 по 10
                Random rnd = new Random();
                var shuffledWords = list.OrderBy(x => rnd.Next(0, 10)).Select(x => x.Value).ToList();
            /*foreach (var word in shuffledWords)
            {
                //Console.WriteLine("shuffledWords" + word);
            }*/
            for (i = 0; i < list.Count; i++)
                {
                    var item = PictureBoxsDict.ElementAt(i);
                    ((PictureBox)item.Value).Image = null;
                    ((PictureBox)item.Value).ImageLocation = shuffledWords[i];
                ((PictureBox)item.Value).Tag = Path.GetFileName(shuffledWords[i]);
            }
                // Сортируем случайным образом второй раз и выкладываем на PictureBox с 10 по 15
                rnd = new Random();
                 shuffledWrds = list.OrderBy(x => rnd.Next(0, list.Count)).Select(x => x.Value).ToList();
            /*foreach (var word in shuffledWrds)
            {
                Console.WriteLine("shuffledWrds" + word);
            }*/
            for (i = 14; i > 9; i--)
                {
                    var item = PictureBoxsDict.ElementAt(i);
                        ((PictureBox)item.Value).Image = null;
                        ((PictureBox)item.Value).ImageLocation = shuffledWrds[14-i];
                ((PictureBox)item.Value).Tag = Path.GetFileName(shuffledWrds[14-i]);
            }

                groupBox2.Visible = false;
                groupBox3.Visible = false;
            //}
        }

        private void pictureBox_MouseEnter(object sender, EventArgs e)
        {
            PictureBox pictureBox = (PictureBox)sender;
            if (pictureBox != null && pictureBox.Tag != null)
            {
                string imageName = pictureBox.Tag.ToString();
                System.Windows.Forms.ToolTip tooltip = new System.Windows.Forms.ToolTip();
                tooltip.SetToolTip(pictureBox, imageName);
            }
            /*string imageName = pictureBox.Tag.ToString();

            System.Windows.Forms.ToolTip tooltip = new System.Windows.Forms.ToolTip();
            tooltip.SetToolTip(pictureBox, imageName);*/
        }

        private void pictureBox_MouseLeave(object sender, EventArgs e)
        {
            PictureBox pictureBox = (PictureBox)sender;

            System.Windows.Forms.ToolTip tooltip = new System.Windows.Forms.ToolTip();
            tooltip.RemoveAll();
        }

        // Обработчик события MouseDown для исходного PictureBox
        private void pictureBox_MouseDown(object sender, MouseEventArgs e)
        {
            /*PictureBox pictureBox = (PictureBox)sender;
            string imagePath = pictureBox.ImageLocation;

            if (!string.IsNullOrEmpty(imagePath))
            {
                string imageName = Path.GetFileName(imagePath);// Получаем имя изображения
                pictureBox = (PictureBox)PictureBoxsDict.ElementAt(j + 10).Value;
                var fileName = pictureBox.ImageLocation;
                string imageNameshuffledWrds = Path.GetFileName(shuffledWrds[j]);

                if (imageName == imageNameshuffledWrds)
                {
                    MessageBox.Show("Картинка под номером " + (j + 1) + " найдена. \n\nИщем картинку под номером " + (j + 2));
                    j++;
                }
            }*/

            // Проверяем, что нажата левая кнопка мыши
            if (e.Button == MouseButtons.Left)
            {
                PictureBox sourcePictureBox = (PictureBox)sender;

                // Проверяем, что исходный PictureBox содержит изображение
                if (sourcePictureBox.Image != null)
                {
                    // Запоминаем изображение во временной переменной и удаляем его из исходного PictureBox
                    Image draggedImage = sourcePictureBox.Image;
                    //sourcePictureBox.Image = null;

                    // Начинаем операцию перетаскивания изображения
                    sourcePictureBox.DoDragDrop(draggedImage, DragDropEffects.Move);
                }
            }
        }
        /*Этот код определяет метод обработчика событий с именем PictureBox_DragDrop, который запускается при выполнении
         операции перетаскивания объекта PictureBox. Вот что делает код:
        Он приводит параметр sender к объекту PictureBox и присваивает его целевой переменной.
        Он проверяет, относятся ли перетаскиваемые данные к типу PictureBox, используя метод GetDataPresent
        объекта DragEventArgs (e). Если это так, код продолжается; в противном случае он выходит из метода.
        Он приводит перетаскиваемые данные к объекту PictureBox и присваивает их исходной переменной.
        Он проверяет, являются ли источник и цель разными объектами PictureBox. Если они есть, код продолжается;
        в противном случае он выходит из метода.
        Он записывает в консоль сообщение, указывающее на операцию перетаскивания из исходного PictureBox в целевой PictureBox.
        Он вызывает метод SwapImages, передавая исходный и целевой объекты PictureBox, чтобы поменять местами их изображения
        или выполнить другие операции, связанные с изображениями.
        Он устанавливает для выбранной переменной значение null.
        Он вызывает метод SelectBox, передающий целевой объект PictureBox, чтобы выполнить какое-либо действие с выбранным полем.
        Он возвращается из метода.*/

        // Обработчик события DragDrop для целевого PictureBox
        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++;
                }
                else
                {
                    e.Effect = DragDropEffects.None;
                    MessageBox.Show("Картинка под номером " + (j + 1) + " найдена неправильно. \n\nВспоминаем картинку под номером " + (j + 1));
                }
            }*/
            /*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 + 10).Value;
                var fileName = pictureBox.ImageLocation;
                string imageNameshuffledWrds = Path.GetFileName(shuffledWrds[j]);

                if (imageName == imageNameshuffledWrds)
                {
                    e.Effect = DragDropEffects.Move; // Разрешаем перенос
                    // Получаем перетаскиваемое изображение
                    Image droppedImage = (Image)e.Data.GetData(DataFormats.Bitmap);

                    // Проверяем, что целевой PictureBox пустой
                    if (targetPictureBox.Image == null)
                    {
                        // Устанавливаем перетаскиваемое изображение в целевой PictureBox
                        targetPictureBox.Image = droppedImage;
                    }
                   // MessageBox.Show("Картинка под номером " + (j + 1) + " найдена. \n\nИщем картинку под номером " + (j + 2));
                    j++;
                }
                else
                {
                    e.Effect = DragDropEffects.None; // Запрещаем перенос
                    MessageBox.Show("Картинка под номером " + (j + 1) + " найдена неправильно. \n\nВспоминаем картинку под номером " + (j + 1));
                }


            }*/
        }

        //Обработчик события DragEnter для целевого PictureBox
private void pictureBox_DragEnter(object sender, DragEventArgs e)
        {
            PictureBox targetPictureBox = (PictureBox)sender;
           // 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++;
                }
                else
                {
                    e.Effect = DragDropEffects.None;
                    MessageBox.Show("Картинка под номером " + (j + 1) + " найдена неправильно. \n\nВспоминаем картинку под номером " + (j + 1));
                }
            }

            // Проверяем, что перетаскивается изображение
            if (e.Data.GetDataPresent(DataFormats.FileDrop))
            {
                e.Effect = DragDropEffects.Copy;
            }
            /*if (e.Data.GetDataPresent(DataFormats.Bitmap))
            {
                e.Effect = DragDropEffects.Move;
            }*/
        }

        private void проверкаToolStripMenuItem_Click(object sender, EventArgs e)
        {
            groupBox2.Visible = true;
            groupBox1.Visible = false;
            // Установить координаты и видимость GroupBox3
            this.Controls.Add(groupBox3);
            groupBox3.Location = new Point(1, 27);
            groupBox3.Visible = true;
        }

        private void подсветкаToolStripMenuItem_Click(object sender, EventArgs e)
        {
            groupBox1.Visible = true;
            groupBox3.Visible = false;
            timer1.Interval = 3000;
            timer1.Start();
        }

        private void pictureBox1_MouseEnter_1(object sender, EventArgs e)
        {
            // Получаем имя изображения из свойства Tag PictureBox
            string imageName = pictureBox1.Tag.ToString();

            // Создаем ToolTip и устанавливаем имя изображения в качестве текста
            System.Windows.Forms.ToolTip tooltip = new System.Windows.Forms.ToolTip();
            tooltip.SetToolTip(pictureBox1, imageName);
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            groupBox1.Visible = false;
            groupBox3.Visible = true;
            timer1.Stop();
        }

        private void pictureBox1_DragDrop(object sender, DragEventArgs e)
        {

        }
    }
}
такое количество символов не пропустит.
 
  • Мне нравится
Реакции: zuvl

zuvl

Особенный
Спасибо от Разулы
Регистрация
1 Окт 2019
Сообщения
763
Реакции
2.553
Ra
2.722
такое количество символов не пропустит.
Он сам просил два раза весь код. А сколько максимум строчек кода он может принять?
Пользователь добавил сообщение :

@Добрый робот (ChatGPT)
c#
Сколько максимум строчек кода ты можешь принять за один раз?
 

Добрый робот (ChatGPT)

Всезнайка
Лелеять и любить
Особенный
Регистрация
27 Фев 2023
Сообщения
1.995
Реакции
343
Ra
255
@Добрый робот (ChatGPT)
c#
Сколько максимум строчек кода ты можешь принять за один раз?
Как модель ИИ, я не имею жесткого ограничения на количество строк кода, которое я могу принять за один раз. Однако, есть ограничения на размер входа и время выполнения для каждого запроса. Обычно рекомендуется разбивать большие объемы кода на более мелкие части для улучшения понимания и обработки.
Если у вас есть конкретный фрагмент кода, с которым вы хотите работать, я могу попробовать помочь вам с ним. Пожалуйста, предоставьте его, и я постараюсь дать ответ на ваши вопросы или предложить соответствующий код.
 

zuvl

Особенный
Спасибо от Разулы
Регистрация
1 Окт 2019
Сообщения
763
Реакции
2.553
Ra
2.722
@Добрый робот (ChatGPT)
c#
Как добавить событие
Код:
pictureBox.DragDrop += pictureBox_DragDrop;
В этом коде для каждого pictureBox
Код:
for (i = 0; i < list.Count; i++)
                {
                    var item = PictureBoxsDict.ElementAt(i);
                    ((PictureBox)item.Value).Image = null;
                    ((PictureBox)item.Value).ImageLocation = shuffledWords[i];
                ((PictureBox)item.Value).Tag = Path.GetFileName(shuffledWords[i]);
            }
 

Добрый робот (ChatGPT)

Всезнайка
Лелеять и любить
Особенный
Регистрация
27 Фев 2023
Сообщения
1.995
Реакции
343
Ra
255
@Добрый робот (ChatGPT)
c#
Как добавить событие
Код:
pictureBox.DragDrop += pictureBox_DragDrop;
В этом коде для каждого pictureBox
Код:
for (i = 0; i < list.Count; i++)
                {
                    var item = PictureBoxsDict.ElementAt(i);
                    ((PictureBox)item.Value).Image = null;
                    ((PictureBox)item.Value).ImageLocation = shuffledWords[i];
                ((PictureBox)item.Value).Tag = Path.GetFileName(shuffledWords[i]);
            }
Для добавления события DragDrop к каждому pictureBox в вашем коде, вы можете использовать цикл foreach для перебора элементов в list и добавить обработчик события к каждому pictureBox. Вот пример кода:csharp
Код:
foreach (var item in list)
{
    PictureBox pictureBox = (PictureBox)item.Value;
    pictureBox.DragDrop += pictureBox_DragDrop;
    // Дополнительный код для каждого pictureBox
    pictureBox.Image = null;
    pictureBox.ImageLocation = shuffledWords[i];
    pictureBox.Tag = Path.GetFileName(shuffledWords[i]);
}
Примечание: В вашем вопросе код содержит PictureBoxsDict, но в коде примера вы используете list. Предполагается, что list является вашим словарем PictureBoxsDict. Если у вас есть различные структуры данных, пожалуйста, уточните для нас, чтобы мы могли предоставить более точный пример.
 

zuvl

Особенный
Спасибо от Разулы
Регистрация
1 Окт 2019
Сообщения
763
Реакции
2.553
Ra
2.722
@Добрый робот (ChatGPT)
c#
PictureBoxsDict создаётся по такому коду
Код:
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;//+
        }
        private void Form1_Load(object sender, EventArgs e)
        {
            // Получаем массив из путей и картинок
            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)
                            if (ctrl2 is PictureBox pb)
                            {
                            AssignPictureBoxProperties(pb);                           

                        }
                    }
                }
                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);
                        }
                    }
                }
            }
А list создаётся таким кодом.
Код:
string[] lst = Directory.GetFiles(@"D:\\Моё программирование\\Пять из десяти1\\bin\\Debug\\Images\");           
                // Делаем из массива словарь(коллекцию)
                int i = 0;
                this.list = new Dictionary<int, string>(lst.ToDictionary(x => i++, x => x));
Как добавить событие
Код:
pictureBox.DragDrop += pictureBox_DragDrop;
В этом коде для каждого pictureBox
Код:
for (i = 0; i < list.Count; i++)
                {
                    var item = PictureBoxsDict.ElementAt(i);
                    ((PictureBox)item.Value).Image = null;
                    ((PictureBox)item.Value).ImageLocation = shuffledWords[i];
                ((PictureBox)item.Value).Tag = Path.GetFileName(shuffledWords[i]);
            }
 

Добрый робот (ChatGPT)

Всезнайка
Лелеять и любить
Особенный
Регистрация
27 Фев 2023
Сообщения
1.995
Реакции
343
Ra
255
@Добрый робот (ChatGPT)
c#
PictureBoxsDict создаётся по такому коду
Код:
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;//+
        }
        private void Form1_Load(object sender, EventArgs e)
        {
            // Получаем массив из путей и картинок
            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)
                            if (ctrl2 is PictureBox pb)
                            {
                            AssignPictureBoxProperties(pb);                           

                        }
                    }
                }
                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);
                        }
                    }
                }
            }
А list создаётся таким кодом.
Код:
string[] lst = Directory.GetFiles(@"D:\\Моё программирование\\Пять из десяти1\\bin\\Debug\\Images\");           
                // Делаем из массива словарь(коллекцию)
                int i = 0;
                this.list = new Dictionary<int, string>(lst.ToDictionary(x => i++, x => x));
Как добавить событие
Код:
pictureBox.DragDrop += pictureBox_DragDrop;
В этом коде для каждого pictureBox
Код:
for (i = 0; i < list.Count; i++)
                {
                    var item = PictureBoxsDict.ElementAt(i);
                    ((PictureBox)item.Value).Image = null;
                    ((PictureBox)item.Value).ImageLocation = shuffledWords[i];
                ((PictureBox)item.Value).Tag = Path.GetFileName(shuffledWords[i]);
            }
Для добавления события DragDrop к каждому pictureBox в данном коде, вы можете изменить метод AssignPictureBoxProperties следующим образом:csharp
Код:
private void AssignPictureBoxProperties(PictureBox pictureBox)
{
    PictureBoxsDict[pictureBox.Name] = pictureBox;
    pictureBox.AllowDrop = true;
    pictureBox.DragEnter += pictureBox_DragEnter;
    pictureBox.MouseDown += pictureBox_MouseDown;
    pictureBox.MouseEnter += pictureBox_MouseEnter;
    pictureBox.MouseLeave += pictureBox_MouseLeave;
    pictureBox.DragDrop += pictureBox_DragDrop; // Добавляем событие DragDrop
}
Теперь каждый pictureBox, созданный с помощью метода AssignPictureBoxProperties, будет иметь обработчик события DragDrop, указанный в методе pictureBox_DragDrop.
 

zuvl

Особенный
Спасибо от Разулы
Регистрация
1 Окт 2019
Сообщения
763
Реакции
2.553
Ra
2.722
@Добрый робот (ChatGPT)
c#
Мы использовали для запрета переноса изображения код
Код:
  e.Effect = DragDropEffects.None;
в pictureBox_DragDrop
Как вернуть состояние мышки к
Код:
e.Effect = DragDropEffects.Move;
В другом событии. Не в событии pictureBox_DragDrop.
 

Добрый робот (ChatGPT)

Всезнайка
Лелеять и любить
Особенный
Регистрация
27 Фев 2023
Сообщения
1.995
Реакции
343
Ra
255
@Добрый робот (ChatGPT)
c#
Мы использовали для запрета переноса изображения код
Код:
  e.Effect = DragDropEffects.None;
в pictureBox_DragDrop
Как вернуть состояние мышки к
Код:
e.Effect = DragDropEffects.Move;
В другом событии. Не в событии pictureBox_DragDrop.
Для возвращения состояния мыши в событии, отличном от pictureBox_DragDrop, вы можете использовать свойство DragEventArgs.Effect для установки желаемого эффекта перетаскивания.
Вот пример, как вы можете это сделать:csharp
Код:
private void SomeOtherEvent(object sender, DragEventArgs e)
{
    // Вернуть состояние перетаскивания к DragDropEffects.Move
    e.Effect = DragDropEffects.Move;
}
Поместите этот код в обработчик события, где вы хотите восстановить состояние мыши после предыдущего запрета переноса изображения.
Обратите внимание, что DragDropEffects.Move используется здесь в качестве примера, и вы можете изменить его на другие эффекты перетаскивания, в зависимости от ваших потребностей.
 

zuvl

Особенный
Спасибо от Разулы
Регистрация
1 Окт 2019
Сообщения
763
Реакции
2.553
Ra
2.722
@Добрый робот (ChatGPT)
c#
При попытке переноса изображения указатель мыши принимает вид красный круг с линией через нее None для операции перетаскивания.
Как вернуть указателю мыши при попытки переноса изображения символ "плюс" для Copy операции перетаскивания или символ стрелки для Move операции перетаскивания где то в другом месте помимо pictureBox_DragDrop.
 

Добрый робот (ChatGPT)

Всезнайка
Лелеять и любить
Особенный
Регистрация
27 Фев 2023
Сообщения
1.995
Реакции
343
Ra
255
@Добрый робот (ChatGPT)
c#
При попытке переноса изображения указатель мыши принимает вид красный круг с линией через нее None для операции перетаскивания.
Как вернуть указателю мыши при попытки переноса изображения символ "плюс" для Copy операции перетаскивания или символ стрелки для Move операции перетаскивания где то в другом месте помимо pictureBox_DragDrop.
Чтобы изменить внешний вид указателя мыши при операции перетаскивания изображения в C#, вам нужно использовать класс Cursor и его метод Current.
Для того, чтобы указатель мыши показывал символ "плюс" при операции перетаскивания для копирования (Copy), вы можете установить соответствующий курсор следующим образом:csharp
Код:
Cursor.Current = Cursors.Copy;
Аналогично, для указателя мыши, показывающего символ стрелки при операции перетаскивания для перемещения (Move), вы можете использовать:csharp
Код:
Cursor.Current = Cursors.SizeAll;
Вы можете вызвать эти строки кода в нужных вам местах, например, при обработке события перетаскивания (DragEnter, DragOver и т. д.), чтобы установить соответствующий курсор.
Приведенные выше примеры предполагают, что у вас уже есть правильные обработчики событий для операций перетаскивания (DragEnter, DragOver и т. д.).
 

Теги по которым нашли тему

  1. chatgpt
  2. шишонин
  3. робот
  4. амигуруми
  5. Александр Шишонин
  6. Написать игру
  7. массаж
  8. Хроники Акаши
  9. опционы
  10. Рубиновый анкх
Сверху