Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# .NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
panfilov
0 / 0 / 0
Регистрация: 05.03.2012
Сообщений: 5
1

Динамическое создание компонентов и подписка их на события

05.03.2012, 02:29. Просмотров 1369. Ответов 3
Метки нет (Все метки)

Добрый день!
Я начинающий программист, пытаюсь разобраться с созданием массивов control-ов и ихних событий. У меня есть три tableLayoutPanel, я в цыкле поместил в каждую ячейку лейблы и создал для них события MouseEnter и MouseLeave. Программа запускается и работает, но при наведении курсора на label выдаёт ошибку. Вот мой код:

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
35
36
37
38
39
40
41
42
43
44
45
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
 
namespace loto
{
    public partial class Form1 : Form
    {
        int i, value;
        Label[] label = new Label[75];
        Random rand = new Random();
 
        public Form1()
        {
            InitializeComponent();
 
            for (i = 0; i < label.Length; i++)
            {
                value = rand.Next(1, 100);
 
                label[i] = new Label();
                label[i].Name = "label" + (i + 1).ToString();
                label[i].Margin = new Padding(3, 3, 2, 2);
                label[i].TabIndex = i;
                label[i].Dock = DockStyle.Fill;
                label[i].BackColor = SystemColors.Control;
                label[i].Font = new Font("MS Reference Sans Serif", 12, FontStyle.Bold);
                label[i].TextAlign = ContentAlignment.MiddleCenter;
                if (value < 10) label[i].Text = "0" + value.ToString();
                else label[i].Text = value.ToString();
                label[i].MouseEnter += new EventHandler((s, args) => { label[i].BackColor = Color.LightGray; });
                label[i].MouseLeave += new EventHandler((s, args) => { label[i].BackColor = SystemColors.Control; });
            }
 
            for (i = 0; i < 25; i++) tableLayoutPanel1.Controls.Add(label[i]);
            for (i = 25; i < 50; i++) tableLayoutPanel2.Controls.Add(label[i]);
            for (i = 50; i < 75; i++) tableLayoutPanel3.Controls.Add(label[i]);
        }
    }
}
Подскажите, что здесь не так.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.03.2012, 02:29
Ответы с готовыми решениями:

Динамическое создание компонентов и подписка их на события 2
Добрый день! В процессе работы возник ещё один вопрос. Программа у меня запускается, но при...

Разработка приложений с использованием стандартных и дополнительных компонентов. Динамическое создание компонентов.
Здравствуйте! Помогите мне, пожалуйста. Условие задачи состоит в следующем: из списка выбираю...

Тестирование закрытых классов, подписка на события
Что нужно делать чтобы подписаться на событие закрытого класса внутри тестового проекта? Внутри...

Динамическое создание компонентов
Добрый день. Задался вопросом как добавить из кода контрол в WPF. Например добавить button в...

Динамическое создание объектов. Подписка на событие
У меня есть несколько linkbuttons которые создаются динамически, им всем присваиваю 1 общее событие...

3
turbanoff
Эксперт Java
4031 / 3766 / 743
Регистрация: 18.05.2010
Сообщений: 9,330
Записей в блоге: 11
Завершенные тесты: 1
05.03.2012, 07:56 2
Вы используете в обработчике переменную i, которая при срабатывании обработчика уже имеет значение = 75. Поменяйте обработчики на такие
C#
1
2
label[i].MouseEnter += new EventHandler((s, args) => { (s as Label).BackColor = Color.LightGray; });
label[i].MouseLeave += new EventHandler((s, args) => { (s as Label).BackColor = SystemColors.Control; });
Да, и сделайте i и value локальными переменными
1
temich-92
c#
90 / 90 / 27
Регистрация: 25.03.2011
Сообщений: 290
05.03.2012, 09:12 3
по моему i вообще не нужно
0
panfilov
0 / 0 / 0
Регистрация: 05.03.2012
Сообщений: 5
05.03.2012, 15:24  [ТС] 4
Большое спасибо! Теперь всё работает.
0
05.03.2012, 15:24
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.03.2012, 15:24

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

Динамическое создание элемента и события
Здравствуйте! Подскажите пожалуйста, как при динамическом создание элемента создавать события. ...

Динамическое создание компонентов в форме с AutoScroll = true
Всем привет. В моей программе предусмотрено динамическое создание трех полей ввода с тремя...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru