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

Узнай цену своей работы

Формулировка задачи:

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

Решение задачи: «Динамическое создание компонентов и подписка их на события»

textual
Листинг программы
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; });

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 3.75 из 5
Похожие ответы