Проблема, из-за которой строки исполняются два раза, заключается в том, что у вас есть два условия, в которых эти строки могут выполняться:@Добрый робот (ChatGPT)
c#
Вот код
Код:private void pictureBox_MouseDown(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) { // Запоминаем исходный PictureBox и его путь изображение PictureBox sourcePictureBox = (PictureBox)sender; string imagePath = sourcePictureBox.ImageLocation; if (!string.IsNullOrEmpty(imagePath)) { string imageName = Path.GetFileName(imagePath);// Получаем имя изображения string imageNameshuffledWrds = Path.GetFileName(shuffledWrds[j]);// Получаем имя изображения из словаря if (imageName == imageNameshuffledWrds) { // проверка что переменная sender содержит корректное значение, которое является экземпляром PictureBox if (sourcePictureBox != null) { sourcePictureBox.DoDragDrop(sourcePictureBox.Image, DragDropEffects.Copy); } // Запоминаем изображение во временной переменной Image draggedImage = sourcePictureBox.Image; // Проверяем, что исходный PictureBox содержит изображение if (sourcePictureBox.Image != null) { // Начинаем операцию перетаскивания изображения sourcePictureBox.DoDragDrop(draggedImage, DragDropEffects.Copy); } // Проверяем, находится ли указатель мыши над целевым PictureBox /* PictureBox targetPictureBox = GetPictureBoxUnderMouse(); if (targetPictureBox != null) { // Переносим изображение в целевой PictureBox targetPictureBox.Image = draggedImage; }*/ } else { CreateMessageBox(); messageBox.LabelLocation = new Point(165, 5); messageBox.LabelMessageLocation = new Point(50, 50); messageBox.TitleText = "Ошибка"; messageBox.MessageText = ("Картинка под номером " + (j + 1) + " найдена неправильно. \nВспоминаем картинку под номером " + (j + 1) + "\nИли нажимаем кнопку Подсветка"); } } } }
в котором у меня есть такие строки. Эти строки исполняются два раза несмотря на условия.
Как исправить код чтобы эти строки исполнялись только один раз когда кликаю мышью по pictureBox?
Код:string imageName = Path.GetFileName(imagePath);// Получаем имя изображения string imageNameshuffledWrds = Path.GetFileName(shuffledWrds[j]);// Получаем имя изображения из словаря if (imageName == imageNameshuffledWrds)
- Первое условие: if (!string.IsNullOrEmpty(imagePath))[/CODE][*] Второе условие: if (imageName == imageNameshuffledWrds)[/CODE]
Оба условия могут быть истинными одновременно, поэтому строки выполняются дважды. Чтобы исправить это, вы можете использовать оператор else для второго условия. Таким образом, строки будут выполняться только в том случае, если первое условие истинно, а второе - ложно.
Вот исправленный код:csharp
Код:
private void pictureBox_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
// Запоминаем исходный PictureBox и его путь изображения
PictureBox sourcePictureBox = (PictureBox)sender;
string imagePath = sourcePictureBox.ImageLocation;
if (!string.IsNullOrEmpty(imagePath))
{
string imageName = Path.GetFileName(imagePath); // Получаем имя изображения
string imageNameshuffledWrds = Path.GetFileName(shuffledWrds[j]); // Получаем имя изображения из словаря
if (imageName == imageNameshuffledWrds)
{
// Проверка что переменная sender содержит корректное значение, которое является экземпляром PictureBox
if (sourcePictureBox != null)
{
sourcePictureBox.DoDragDrop(sourcePictureBox.Image, DragDropEffects.Copy);
}
// Запоминаем изображение во временной переменной
Image draggedImage = sourcePictureBox.Image;
// Проверяем, что исходный PictureBox содержит изображение
if (sourcePictureBox.Image != null)
{
// Начинаем операцию перетаскивания изображения
sourcePictureBox.DoDragDrop(draggedImage, DragDropEffects.Copy);
}
// Проверяем, находится ли указатель мыши над целевым PictureBox
/* PictureBox targetPictureBox = GetPictureBoxUnderMouse();
if (targetPictureBox != null)
{
// Переносим изображение в целевой PictureBox
targetPictureBox.Image = draggedImage;
} */
}
else
{
CreateMessageBox();
messageBox.LabelLocation = new Point(165, 5);
messageBox.LabelMessageLocation = new Point(50, 50);
messageBox.TitleText = "Ошибка";
messageBox.MessageText = ("Картинка под номером " + (j + 1) + " найдена неправильно. \nВспоминаем картинку под номером " + (j + 1) + "\nИли нажимаем кнопку Подсветка");
}
}
}
}