0 / 0 / 1
Регистрация: 14.05.2014
Сообщений: 4

Нужно вывести адресс того элемента,на которуй нажал пользователь

14.05.2014, 07:38. Показов 1766. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Мне нужно вывести значение j той PictureBox, которую нажал пользователь. Но после нажатия в lablebox всегда заноситься значение 8. Не понимаю, в чем тут проблема. Я новичек.
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
 private void Form1_Load(object sender, EventArgs e)
        {
            int io, jo,k;
            io = 0;
            jo = 0;
            k = 0;
            for (int i = 0; i<8 ; i++)
                for (int j = 0; j < 8; j++)
                {
                    
                        io = i;
                        
                        pictureBox[i, j].Click += (s, t) =>
                       {    PictureBox pb = (PictureBox)s;
 
                       label1.Text = Convert.ToString(j);
                      
                      
                           if ((k == 0) && (jo==0))
                           {
                               pb.BackColor = Color.Red;
                               k = 1;
                              
                           }
                           if ((k != 0) && (io != 0)) 
                           {
                               pb.BackColor = Color.Red;
                              
                               
                           }
                       };
                    
                }
        }
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.05.2014, 07:38
Ответы с готовыми решениями:

Вывести все элементы массива, которые больше того элемента, индекс которого вводит пользователь
Вывести все элементы массива, которые больше того элемента, индекс которого вводит пользователь! Как решить задачу?

Проверка : нажал ли пользователь клавишу
Извиняюсь за тупой вопрос. Нужна функция которая проверяет, нажал ли пользователь какую то клавишу или нет. Знаю только наподобие getch()...

Вывести ссылку в зависимости того авторизованн ли пользователь
]Доброго времени суток. Помогите. Нужно в зависимости от того авторизирован ли пользователь выводить ту или иную ссылку. Авторизованисть...

8
 Аватар для kodv
1449 / 1121 / 347
Регистрация: 11.04.2011
Сообщений: 2,621
14.05.2014, 09:30
misha007, данная проблема возникла из-за недопонимания принципов работы с областью видимости переменных в C#. Вам нужно перечитать информацию по этому поводу, чтобы устранить пробелы в знаниях. У вас в label1 сохраняется значение переменной j, которое в ней находится на момент выполнения этого присваивания (клик по PictureBox'у), а не на момент добавления обработчика к событию Click.
Чтобы было понятнее. У вас открывается форма, выполняется обработчик события Load, где в цикле всем событиям Click всех PictureBox'ов присваивается обработчик. В конце выполнения метода Form1_Load значение переменной j равно 8. Переменная j фактически становится глобальной, но доступ к ней есть только из вашего обработчика события Click PictureBox'а. Так как в вашем обработчике значение переменной j не меняется, а из других областей видимости доступа к этой переменной нет, то при нажатии на любой PictureBox в ваш label1 будет записываться именно это значение, то есть 8.

Добавлено через 4 минуты
Кстати, значение переменной io тоже всегда будет равно 7, а не как вы, видимо, планирвоали.
0
 Аватар для Spawn
995 / 893 / 354
Регистрация: 24.03.2014
Сообщений: 2,381
Записей в блоге: 2
14.05.2014, 09:30
Лучший ответ Сообщение было отмечено misha007 как решение

Решение

А принцип передачи значения в подобный обработчик события Click Вы знаете?
Нужно положить j, например, в Tag к PictureBox, а оттуда уже доставать при необходимости. В текущем примере у Вас переменная просто итерируется в том числе и для вспомогательного класса, который генерируется для анонимной функции.
C#
1
2
3
4
5
6
7
8
9
10
11
12
            for (int j = 0; j < 10; j++)
            {
                pb[j] = new PictureBox() 
                { 
                    Size = new Size(30, 30), 
                    Location = new Point(40 * j, 0), 
                    BackColor = Color.Green, 
                    Tag = j 
                };
                Controls.Add(pb[j]);
                pb[j].Click += (s, a) => MessageBox.Show(((int)(s as PictureBox).Tag).ToString());
            }
0
 Аватар для kodv
1449 / 1121 / 347
Регистрация: 11.04.2011
Сообщений: 2,621
14.05.2014, 09:34
Лучший ответ Сообщение было отмечено misha007 как решение

Решение

Решить данную проблему можно следующим образом:
C#
1
2
3
4
5
// какой то код ...
pictureBox[i, j].Tag = j; //Вставить вместо 12 строки вашего примера
// Какой то код ...
label1.Text = ((Control)sender).Tag.ToStirng(); // Вставить вместо 16 строки вашего примера
// Какой то код ...
Добавлено через 45 секунд
Spawn, опередили)
0
14.05.2014, 09:35

Не по теме:

kodv, пока я пример рисовал, Вы текст писали, с которым меня опередили :D

0
0 / 0 / 1
Регистрация: 14.05.2014
Сообщений: 4
14.05.2014, 15:18  [ТС]
Spawn, kodv, Спасибо большое за вашу отзывчивость и помощь! У меня возникло еще два небольших вопроса.
1) Локальный. У меня получилось сохранить одну из двух координат бокса, куда можно записать вторую координату?
2) Глобальный. Что бы вы посоветовали мне прочитать, чтобы мне лучше понимать данную тему?
0
 Аватар для kodv
1449 / 1121 / 347
Регистрация: 11.04.2011
Сообщений: 2,621
14.05.2014, 15:53
Цитата Сообщение от misha007
У меня получилось сохранить одну из двух координат бокса, куда можно записать вторую координату?
Туда же. В Tag можно записать все, что угодно. Можете записать в него массив, список или коллекцию. Можете создать структуру или класс, которые будут хранить нужные значения, а потом записать их в Tag.
0
 Аватар для Spawn
995 / 893 / 354
Регистрация: 24.03.2014
Сообщений: 2,381
Записей в блоге: 2
14.05.2014, 19:23
misha007, Шилдт, Троелсен... Данная тема это азы в общем-то...
0
0 / 0 / 1
Регистрация: 14.05.2014
Сообщений: 4
15.05.2014, 00:05  [ТС]
Еще раз спасибо за помощь.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.05.2014, 00:05
Помогаю со студенческими работами здесь

Checkbox нажал пользователь или алгоритм?
Добрый день! При загрузке программы выставляются сохраненные значения Checkbox-ов. При этом срабатывает событие CheckedChenged и...

Определить на какой рядок нажал пользователь
Добрый вечер всем. При помощи следующей XAML Разметки и С# кода, из базы даных я получаю на экране свою таблицу телефонов. Как определять...

Как узнать, на какую кнопку нажал пользователь?
Есть некая база данных с которой считываем вопрос и ответы к нему printf(&quot;&lt;h3&gt;Вопрос: $text&lt;/h3&gt;&lt;br/&gt;&quot;); ...

Проверить не нажал ли пользователь кнопку завершения работы
Как проверить не нажал ли пользователь кнопку завершения работы в меню пуск?

Нужно чтоб изменялась сума денег после того как пользователь выбрал свою покупку
Подскажите как сделать так чтоб код выполнялся до тех пор пока метод не вернет 0 или баланс не будут равен 0 package returnMoney; ...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

Новые блоги и статьи
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2. Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru