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

Присваивать значение элемента массива элементу label на форме с соответствующим номером

12.11.2019, 06:43. Показов 4715. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
Такая вот задача. Имеется 2-мерный числовой массив m 60 строк и 2 столбца. Имеется форма, на которой находятся 60 label'ов, которые пронумерованы последовательно от 1 до 60, т.е. label1, label2 и т. д. Необходимо, чтобы при каждом нажатии кнопки свойство label.text каждого лейбла принимало значение 1-го столбца соответствующего номера (i-того номера) строки массива m. Например, label10.text = m[10,1].ToString(), и т.д. для каждого лейбла;

Т.е. надо:

C#
1
label[i].text = m[i,1].ToString();
Но так написать нельзя. Подскажите, пожалуйста, как правильно написать в данном случае.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
12.11.2019, 06:43
Ответы с готовыми решениями:

Как присваивать элементу comboBox значение?
Есть comboBox, где Юля из 5-ого класса, а Оля из 6-ого: =Юля =Оля Как присвоить Юле и Оле какой они класс? То есть, например,...

Можно ли переменной или элементу массива присваивать NULL
Написал программу для двумерного массива целых чисел размера m*n , которая находит z = min + max, где min — наименьший элемент среди всех...

Каждому элементу массива, значение которого четное, присваивается значение первого элемента
Помогите написать программу... С клавиатуры вводится массив(его размер и значение элементов заводит пользователь) , каждому элементу...

16
Заблокирован
12.11.2019, 07:56
Цитата Сообщение от Бляхирев Посмотреть сообщение
60 label'ов
динамически создаются?
0
 Аватар для bodynar
345 / 307 / 135
Регистрация: 14.03.2015
Сообщений: 1,158
Записей в блоге: 1
12.11.2019, 08:38
Цитата Сообщение от Бляхирев Посмотреть сообщение
Но так написать нельзя. Подскажите, пожалуйста, как правильно написать в данном случае.
А почему нельзя?
Если у вас лейблы в отдельных переменных лежат (как вы написали label1, label2, etc), то просто объедините это дело в массив и работайте как с массивом, если вам так удобно.

А если же в чем-то другом беда - расскажите о ней подробней.

PS> Иль, может быть, вы решили пойти "окольным путем"?
0
Заблокирован
12.11.2019, 08:51
динамические сподручней в массиве хранить, или индекс из имени выцарапывать
C#
1
2
3
4
5
6
7
8
9
            foreach (Control ctr in Controls)
                if (ctr is Label)
                {
                    string nm = (ctr as Label).Name;
                    string sidx = "";
                    foreach (char c in nm)
                        if (char.IsDigit(c)) sidx += c;
                    int idx = sidx == "" ? -1 : int.Parse(sidx);
                }
0
2 / 2 / 0
Регистрация: 11.01.2016
Сообщений: 109
12.11.2019, 13:21  [ТС]
Цитата Сообщение от Holiday13 Посмотреть сообщение
динамически создаются?
Нет, вручную

Добавлено через 9 минут
Цитата Сообщение от bodynar Посмотреть сообщение
А почему нельзя?
Если у вас лейблы в отдельных переменных лежат (как вы написали label1, label2, etc), то просто объедините это дело в массив и работайте как с массивом, если вам так удобно.

А если же в чем-то другом беда - расскажите о ней подробней.

PS> Иль, может быть, вы решили пойти "окольным путем"?
я создал массив лейблов в public partial class Form1 : Form:
C#
1
Label[] lb = new Label[60];
Затем в процедуре для кнопки прописал:
C#
1
lb[i].Text = m[i,1].ToString();
Программа запускается, но при нажатии на кнопку выдаёт ошибку, пишет: "Необработанное исключение типа "System.NullReferenceException" в WindowsFormsApplication3.exe
Дополнительные сведения: Ссылка на объект не указывает на экземпляр объекта."
Как правильно работать с элементами на форме (в моём случае с лейблами) как с массивом? Какие у меня ошибки?
0
Эксперт .NET
 Аватар для Даценд
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
12.11.2019, 13:27
Цитата Сообщение от Бляхирев Посмотреть сообщение
я создал массив лейблов в public partial class Form1 : Form:
Не так. Нужно:
C#
1
Label[] lb = new Label[] {label1, label2, label3, ..., label666 };
0
2 / 2 / 0
Регистрация: 11.01.2016
Сообщений: 109
12.11.2019, 13:34  [ТС]
Цитата Сообщение от Даценд Посмотреть сообщение
Не так. Нужно:
C#
1
Label[] lb = new Label[] {label1, label2, label3, ..., label666 };
Подчеркивает красным label1, label2 и т.д.
error CS0236: Инициализатор поля не может обращаться к нестатическому полю, методу или свойству "WindowsFormsApplication3.Form1.labe l1"
0
Эксперт .NET
 Аватар для Даценд
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
12.11.2019, 13:38
Лучший ответ Сообщение было отмечено Бляхирев как решение

Решение

Бляхирев,
Ну это я примерно изобразил, указывая, что элементы вашего массива неинициализированными остались.
Если точно нужно, то объявите в классе, инициализируйте в методе. Например, так:
C#
1
2
3
4
5
Label[] lb;
private void Form1_Load(object sender, EventArgs e)
{
    lb = new Label[] {label1, label2, label3, ..., label666 };
}
1
2 / 2 / 0
Регистрация: 11.01.2016
Сообщений: 109
12.11.2019, 14:01  [ТС]
Цитата Сообщение от Даценд Посмотреть сообщение
Бляхирев,
Ну это я примерно изобразил, указывая, что элементы вашего массива неинициализированными остались.
Если точно нужно, то объявите в классе, инициализируйте в методе. Например, так:
C#
1
2
3
4
5
Label[] lb;
private void Form1_Load(object sender, EventArgs e)
{
    lb = new Label[] {label1, label2, label3, ..., label666 };
}
Работает. Благодарствую, с уважением.
0
Эксперт JS
6496 / 3907 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
12.11.2019, 15:14
Бляхирев, правильный вариант - собрать метки в любой контейнер, можно даже невидимый,
и по-человечески перебором присвоить значения.

Например, все нужные метки поместили в panel1.
C#
1
2
3
4
5
6
7
8
9
        private void Form1_Load(object sender, EventArgs e)
        {
            var array = new int[,] { { 1, 1000 }, { 2, 2000 }, { 3, 3000 } };
            var i = 0;
            foreach (var item in panel1.Controls.OfType<Label>())
            {
                item.Text = array[i++, 1].ToString();
            }
        }
До уровня детского сада не надо решение доводить.

Добавлено через 3 минуты
----
Это я первый проект в dotnet 3 Winforms сделал
0
2 / 2 / 0
Регистрация: 11.01.2016
Сообщений: 109
16.11.2019, 08:39  [ТС]
Можно еще спросить? Я просто новичок в C#, да и вообще. Вот у меня есть массив лейблов
C#
1
 lb = new Label[] {label1, label2, label3, ..., label666 }.
Можно как-то сделать, чтобы у этого массива появился второй столбец, значения в котором являются числами, соответствующими порядковому номеру каждого лейбла? Т.е. тип интеджер?
0
 Аватар для bodynar
345 / 307 / 135
Регистрация: 14.03.2015
Сообщений: 1,158
Записей в блоге: 1
16.11.2019, 11:55
Бляхирев, в таком случае есть пара вариантов:
Сортировка массива таким образом, чтобы порядковый номер соответствовать номеру в массиве (например label4 - 4й порядковый номер и 3 позиция в массиве)
Или же использование другую структуру данных, но, думаю, вам это не понадобится (в идеале вообще описать вашу задумку и скорректировать подход - ведь странно, что 60 лейблов..)
0
2 / 2 / 0
Регистрация: 11.01.2016
Сообщений: 109
16.11.2019, 12:20  [ТС]
Цитата Сообщение от bodynar Посмотреть сообщение
Бляхирев, в таком случае есть пара вариантов:
Сортировка массива таким образом, чтобы порядковый номер соответствовать номеру в массиве (например label4 - 4й порядковый номер и 3 позиция в массиве)
Или же использование другую структуру данных, но, думаю, вам это не понадобится (в идеале вообще описать вашу задумку и скорректировать подход - ведь странно, что 60 лейблов..)
Короче, тест с картинками. Чувак отвечает на 60 вопросов. Там 60 лейблов, каждый из которых принимает значение ответа пользователя, переведенное в строку с припиской "Ваш ответ...". Необходимо чтобы пользователь смог щёлкнуть по любому лейблу и сразу перейти на тот вопрос, к которому относится этот лейбл. Для этого надо чтобы глобальная переменная i приняла числовое значение, которое соответствует порядковому номеру данного лейбла. Для этого необходимо, чтобы массив лейблов содержал 2 столбца: 1 - сам лейбл (label1, label2... и т.д.) а 2 столбец это число 1, 2, 3 и т.д. Пока на ум не приходит ничего, кроме как расписать для каждого лейбла метод на щелчёк мыши, в котором i будет присваиваться соотв. значение. Но это всё как-то неправильно, должно быть более гибкое решение.
0
 Аватар для bodynar
345 / 307 / 135
Регистрация: 14.03.2015
Сообщений: 1,158
Записей в блоге: 1
16.11.2019, 12:30
Бляхирев, Не совсем понял как выглядит ваше окно с 60 лейблами - не могли бы вы показать черновик дизайна?

И где, в данный момент, вы храните / предполагаете хранить данные (ответы на вопросы) ?
0
2 / 2 / 0
Регистрация: 11.01.2016
Сообщений: 109
16.11.2019, 12:34  [ТС]
в числовом двумерном массиве m, где 1 столбец - правильный ответ, 2 столбец - ответ пользователя
0
2 / 2 / 0
Регистрация: 11.01.2016
Сообщений: 109
16.11.2019, 12:39  [ТС]
фотка
Миниатюры
Присваивать значение элемента массива элементу label на форме с соответствующим номером  
0
2 / 2 / 0
Регистрация: 11.01.2016
Сообщений: 109
16.11.2019, 14:40  [ТС]
Ой тупооооооой....
Допёр таки.
C#
1
2
3
4
5
6
7
8
9
10
11
12
  private void labels_Click(object sender, EventArgs e)
        {
            var label = (Label)sender;
   
            
           for (int l = 1; l <= 60; l++) 
            {
                if (label.Name == "label"+l)
                {
                  i = l;
                }
            }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.11.2019, 14:40
Помогаю со студенческими работами здесь

Присвоить 2-му элементу массива значение 10-го элемента
Одномерный массив из 10 элементов заполнить случайным образом числами от 0 до 50. Присвоить 2-му элементу значение 10-го элемента, а...

Как сделать так что, если на 2 форме значение label.caption поменялось, то и на 1 форме у label.caption было такое же
У меня есть 2 формы. На них есть по одному label. Как сделать так что, если на второй форме-значение label.caption поменялось, то и на 1...

Метод, устанавливающий для элемента массива с номером n значение value
Здравствуйте, объясните метод, это вообще как? &quot;void Set(int n, int value) – устанавливает для элемента массива с номером n значение...

Присвоить элементу одномерного массива значение другого элемента
Доброе время суток! За ранее благодарен, тому кто откликнется!!! Задача, головоломка! А кому раз плюнуть!!!:) Начало сделал, а...

Присвоить пятому элементу массива удвоенное значение десятого элемента
Помогите решить задачу. Одномерный массив из 13 элементов заполнить случайным образом числами от -7 до 7. Присвоить 5-му элементу...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru