@goldolov_na

Как проверить были ли все кликнуты элементы?

есть picturebox и на нем по координатам расположены выделенные объекты,как проверить что все элементы были кликнуты?
вот часть кода:
public Form4()
        {
 
            InitializeComponent();
            objects = new List<MapObject2>();
            objects.Add(new MapObject2()
            {
                Name = "Мумия",
                X = 258,
                Y = 136,
                Width = 24,
                Height = 43
            });
 
            objects.Add(new MapObject2()
            {
                Name = "Банка",
                X = 286,
                Y = 178,
                Width = 17,
                Height = 17
            });
 
            objects.Add(new MapObject2()
            {
                Name = "Змеи",
                X = 370,
                Y = 303,
                Width = 23,
                Height = 19
            });
 
            objects.Add(new MapObject2()
            {
                Name = "Царь",
                X = 73,
                Y = 132,
                Width = 31,
                Height = 42
            });
 
            objects.Add(new MapObject2()
            {
                Name = "Колесница",
                X = 352,
                Y = 103,
                Width = 65,
                Height = 41
            });
 
            objects.Add(new MapObject2()
            {
                Name = "Конь",
                X = 5,
                Y = 163,
                Width = 15,
                Height = 38
            });
 
        }
        List<MapObject2> objects;
private void PictureBox2_MouseClick(object sender, MouseEventArgs e)
        {
            int currentX = e.X;
            int currentY = e.Y;
            for (int i = 0; i < objects.Count; i++)
            {
                if (currentX > (objects[i].X - objects[i].Width / 2) & currentX < (objects[i].X + objects[i].Width / 2)
                & currentY > (objects[i].Y - objects[i].Height / 2) & currentY < (objects[i].Y + objects[i].Height / 2))
                {
                    MessageBox.Show("Ты нашел слово!");
 
                }
 
            }
        }
  • Вопрос задан
  • 72 просмотра
Решения вопроса 1
@goldolov_na Автор вопроса
Код для класса MapObject2
public   class MapObject2
{
    public string Name;
    public int X;

    public int Y;
    public int Width;
    public int Height;

    public bool IsClicked = false;
}

основной код
private void pictureBox1_MouseClick(object sender, MouseEventArgs e)
    {
        int currentX = e.X;
        int currentY = e.Y;
        for (int i = 0; i < objects.Count; i++)
        {
            if (currentX > (objects[i].X - objects[i].Width / 2) & currentX < (objects[i].X + objects[i].Width / 2)
            & currentY > (objects[i].Y - objects[i].Height / 2) & currentY < (objects[i].Y + objects[i].Height / 2))
            {
                MessageBox.Show("Ты нашел слово: " + objects[i].Name);
                //Отмечаем что данный объект прокликан
                objects[i].IsClicked = true;
            }
        }

        //Проверяем все ли объекты прокликаны
        if (IsAllClicked()) MessageBox.Show("Все объекты прокликаны");
    }

    //Проверка коллекции объектов - все ли прокликаны
    private bool IsAllClicked()
    {
        bool AllObjectsClicked = true;
        foreach (MapObject2 item in objects)
        {
            if (!item.IsClicked)
            {
                AllObjectsClicked = false; break;
            }
        }
        return AllObjectsClicked;
    }
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
FoggyFinder
@FoggyFinder
Рассматривайте "было ли нажатие" как состояние.

Создайте новый, отдельный класс, который будет содержат все дополнительные состояния, свойства объекта для более удобной с ним работы:

public class SomeObject
{
    public bool WasClicked { get; set; }
    public MapObject2 Object { get; }

    public SomeObject(MapObject2 mobj)
    {
        Object = new MapObject2(mobj);
    }
}


Внимание - не используйте название SomeObject. Наименования должны отражать смысл, назначение объекта. Мне сложно понять цель проекта поэтому дать осмысленное название не могу. К классу MapObject2 это тоже относится.

Есть и другие варианты, но я бы на вашем месте остановился именно на таком подходе.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы