Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
0 / 0 / 1
Регистрация: 21.02.2015
Сообщений: 31
1

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

29.09.2016, 12:18. Показов 1929. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Хочу написать аналог игры "сейф братьев пилотов".
Суть: На сейфе множество поворачиваемых рукояток, которые расположены горизонтально и вертикально. Рукоятки расположены квадратом, как 2-мерный массив NxN (N настраиваемое). При повороте рукоятки (кликом мышки меняется положение рукоятки с вертикального в горизонтальный и обратно), поворачиваются все рукоятки в одной строке и в одном столбце.
Я решил создать массив из PictureBox'ов :
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
PictureBox[,] pb = new PictureBox[n, n];
            for (int i = 0; i < n; i++)
            {
                for (int j = 0; j < n; j++)
                {
                    pb[i,j] = new PictureBox();
                    pb[i,j].Location = new System.Drawing.Point(10 + i * 100, 10 + j * 100);
                    pb[i,j].Size = new System.Drawing.Size(80, 90);
                    pb[i,j].TabIndex = i;
                    pb[i,j].BackColor = Color.Black;
                    pb[i,j].Image = Properties.Resources.Image1;
                    Controls.Add(pb[i,j]);
                }
            }
Но теперь встает вопрос: как обрабатывать клик по определенному PictureBox'у (например pb[2,1]), с учетом того, что N настраиваемое? Т.е. их может быть [2,2], [3,3] и т.п., как пользователь введет.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.09.2016, 12:18
Ответы с готовыми решениями:

Клик по PictureBox: получение координат клика на PictureBox.Image
Собственно имею PictureBox, например размерами 500 на 500 и в нем есть картинка, например размерами...

Как сделать клик по определенному тексту?
В общем, на самом деле.. думаю для вас это легкое из легких, а я уже что не пробовал.. всё до...

Как при быстром многократном клике по кнопке обрабатывать только первый клик
Есть такая задача: Элемент (например div) должен двигаться влево по клику по кнопке. Кликнули по...

Как создать событие на клик мышкой по компоненту PictureBox?
Если я добавляю компонент (picturebox) на форму в коде, как мне создать событие на клик мышкой по...

5
484 / 439 / 123
Регистрация: 05.01.2010
Сообщений: 1,848
29.09.2016, 12:21 2
самое банальное, что приходит в голову - добавить обработчик события клика по PictureBox'у в цикле добавления их в массив
0
0 / 0 / 1
Регистрация: 21.02.2015
Сообщений: 31
29.09.2016, 12:24  [ТС] 3
C#
1
pb[i,j].Click = pb[i, j].Image.RotateFlip(RotateFlipType.Rotate90FlipNone);
Так?
0
Эксперт .NET
5871 / 4748 / 2940
Регистрация: 20.04.2015
Сообщений: 8,361
29.09.2016, 13:00 4
Лучший ответ Сообщение было отмечено Slavap08 как решение

Решение

Slavap08,
так:
C#
1
pb[i, j].Click += new EventHandler(pbClick);
обработчик:
C#
1
2
3
4
5
6
void pbClick(object sender, EventArgs e)
{
    Image image = (sender as PictureBox).Image;
    image.RotateFlip(RotateFlipType.Rotate90FlipNone);
    (sender as PictureBox).Image = image;
}
1
0 / 0 / 1
Регистрация: 21.02.2015
Сообщений: 31
29.09.2016, 13:19  [ТС] 5
Даценд, а как завязать это вращение картинки по i и j? Чтобы при повороте рукоятки поворачивались все рукоятки в одной строке и в одном столбце.
0
Эксперт .NET
5871 / 4748 / 2940
Регистрация: 20.04.2015
Сообщений: 8,361
29.09.2016, 14:48 6
Лучший ответ Сообщение было отмечено Slavap08 как решение

Решение

Slavap08,
например, так:
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
PictureBox[,] pb;
int n = 3;
private void button1_Click(object sender, EventArgs e)
{
    pb = new PictureBox[n, n];
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            pb[i, j] = new PictureBox();
            pb[i, j].Location = new System.Drawing.Point(10 + i * 100, 10 + j * 100);
            pb[i, j].Size = new System.Drawing.Size(80, 90);
            pb[i, j].TabIndex = i;
            pb[i, j].BackColor = Color.Black;
            pb[i, j].Image = Properties.Resources.Image1;
            Controls.Add(pb[i, j]);
            int row = i;
            int column = j;
            pb[i, j].Click += (x, y) => { pbClick(row, column); };
        }
    }
}
 
void pbClick(int row, int column)
{
    for (int i = 0; i < n; i++)
        for (int j = 0; j < n; j++)
            if (i == row || j == column)
            {
                Image image = pb[i, j].Image;
                image.RotateFlip(RotateFlipType.Rotate90FlipNone);
                pb[i, j].Image = image;
            }
}
1
29.09.2016, 14:48
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.09.2016, 14:48
Помогаю со студенческими работами здесь

Как узнать, на какой PictureBox был сделан клик?
Здравствуйте, подскажите, пожалуйста, как узнать на какой pictureBox был сделан клик? pictureBox...

Клик по определенному месту Image
Друзья, такой вопрос, существует ли возможность задавать различные события по клику на определенные...

Как обрабатывать элементы массива по типу обычных переменных?
Есть dataGridView, в него заносятся данные, столкнулся с проблемой : Как элементы массива...

Обработать клик по картинке на PictureBox
Обработать клик по картинке на PictureBox. Возможно ли это? Если да, то как?


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru