Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
mashachan90

Определить, по какому из PictureBox был произведён клик мышкой

30.09.2013, 13:36. Показов 2871. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день. Так получилось, что гугл ничего подсказать не может.
Вот обращаюсь к вам

Имеется двумерный массив pm[k,l] состоящий из picturebox. Как узнать, в какой picturebox мы кликаем.
То есть, при клике на любой элемент(picturebox) из массива, должен узнавать данные его pm[цифра,цифра]
C#
1
2
3
 public void pictbox_Click(object sender, EventArgs e)
        {
            PictureBox pictbox = sender as PictureBox;
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
30.09.2013, 13:36
Ответы с готовыми решениями:

Узнать, по какому контролу был клик мышкой
На форме несколько компонентов. Как узнать, по которому был сделан очередной клик и вывести сообщение об этом?

Определить, по какому из PictureBox был произведен клик
Есть массив из 15х15 PictureBox, расположенных на форме квадратиком. Задача - при щелчке по какому-то из них вернуть его номера в массиве...

Как определить по какому Label был совершен клик
Здравствуйте. Есть несколько LinkLabel. Все они при нажатии назначены на один и тот же метод. Как определить какой именно линк был...

5
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
30.09.2013, 13:42
Добрый день.

Если у вас изображения расположены на форме в виде таблицы и все пикчербоксы имеют одинаковый размер, то индексы можно высчитать банальной арифметикой из координат клика.
0
mashachan90
30.09.2013, 14:01
Цитата Сообщение от kolorotur Посмотреть сообщение
Добрый день.

Если у вас изображения расположены на форме в виде таблицы и все пикчербоксы имеют одинаковый размер, то индексы можно высчитать банальной арифметикой из координат клика.
Все верно, вот только высчитать у меня так и не получилось

Добавлено через 17 минут
Если происходит движение формы, то Cursor.Position.X возрастает или уменьшается.
Поэтому после простого вычисления
tk1 = Cursor.Position.X -100;
tk2 = tk1 / 25;
получаются всегда разные координаты
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
30.09.2013, 14:07
mashachan90, ну если не хочется возиться с координатами, то можете просто пробежаться по массиву и проверять, является ли текущий элемент пикчербоксом, по которому кликнули.
Думаю, шестнадцать итераций — не такое большое количество, чтобы как-то повлияло на производительность.
0
 Аватар для Pooh
409 / 361 / 82
Регистрация: 07.10.2009
Сообщений: 558
30.09.2013, 15:25
Цитата Сообщение от mashachan90 Посмотреть сообщение
Имеется двумерный массив pm[k,l] состоящий из picturebox. Как узнать, в какой picturebox мы кликаем.
То есть, при клике на любой элемент(picturebox) из массива, должен узнавать данные его pm[цифра,цифра]
Пишем класс:
C#
1
2
3
4
5
6
7
8
9
public class Index
{
    public Index()
    {
    }
    
    public int I {get; set;}
    public int J {get; set;}
}
Создаем массив pictureBox:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
PictureBox[,] pm = new PictureBox[3,3];
for (int i=0; i<3; i++) 
{
    for (int j=0; j<3; j++) 
    {
        PictureBox p = new PictureBox();
        p.Click += new EventHandler(p_Click);
                //загружаем индексы
        Index index = new Index();
        index.I = i;
        index.J = j;
        p.Tag = index;
        pm[i,j] = p;
    }
}
В событии Click:
C#
1
2
3
4
5
6
7
void p_Click(object sender, EventArgs e)
{
    PictureBox p = sender as PictureBox;
        //получаем индексы
    int indexI = ((Index)(pm[1,2].Tag)).I;
    int indexJ = ((Index)(pm[1,2].Tag)).J
}
По-моему, так!
1
Эксперт .NET
 Аватар для Wolfdp
3790 / 1767 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
30.09.2013, 17:38
А почему просто не наследоваться от класса PictureBox?

C#
1
2
3
4
5
public class MyPictureBox : PictureBox
{
public int NumberX {get;set;}
public int NumberY {get;set;}
}
И дальше уже работать с ним?

C#
1
2
3
4
5
6
7
8
for (int i = 0; i < n; i++)
for (int j = 0; j < n; i++)
{
picture = new MyPictureBox();
picture.NumberX = i;
picture.NumberY = j;
list[i,j] = picture;
}
C#
1
2
3
4
public void pictbox_Click(object sender, EventArgs e)
        {
            MyPictureBox pictbox = sender as MyPictureBox;
            if (pictbox.NumberX == 1)
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
30.09.2013, 17:38
Помогаю со студенческими работами здесь

Какой клавишей мыши был произведен клик?
Здравствуйте. Может-быть вопрос покажется простым, но как определить - какой клавишей был произведен клик? Суть в следующем: я написал...

Получить имя ресурса на котором был произведен клик
Допустим есть картинка с названием 1.jpg. Я кbдаю ее в drawable и получается ее адрес R.drawable.1 Как сделать, когда я размещу ее на...

Определить на какой PictureBox был сделан клик правой кнопкой мыши
Друзья, как в этом безобразии определить на какой PictureBox был сделан клик правой кнопкой мыши? Подробнее прошу!Всем добра и с...

Отследить по какому элементу был клик
на форме есть 2 pictureBox. При клике на любой из них происходит запуск таймера. В таймере идёт отсчёт от 5 до 0. Когда таймер доходит до 0...

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


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru