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