Нужна помощь в чтении текста этикетки из динамически созданных этикеток.

У меня есть метод с именем addDays, который принимает первый день месяца и количество дней в нем. Этот метод добавляет динамические метки в таблицу 7x6, которые будут представлять каждый день месяца каждой недели. Я также добавил события к каждой метке, чтобы человек мог щелкнуть их. Проблема, с которой я сталкиваюсь, заключается в том, что мне нужно иметь возможность читать метки, которые человек щелкнул. Допустим, я запускаю приложение для заполнения моего календаря и нажимаю на первое число месяца, затем я хочу получить текст этой метки, которая будет равна 1.
Вот код моего метода addDays.

private void addDays(int day,int totaldays)
    {
            int reset = 0;
            Label newlabel;
            string label;
            int labelnum;
            Console.WriteLine("testoutputbeforebig forloop");
            //DayTableHold.Controls.Add(newlabel, 0, 6);
            int numday = 0;
            for (int coll = 0; coll <= 7; coll++)
            {

                    for (int row = 0; row <=6; row++)
                    {
                        if (numday < totaldays)
                        {
                            newlabel = new Label();
                            newlabel.AutoSize = true;


                            if (row==day &&coll==0)
                            {
                                labelnum = numday + 1;
                                label = labelnum.ToString();
                                newlabel.Text = label;
                                newlabel.Margin = new System.Windows.Forms.Padding(17, 0, 10, 0);
                                newlabel.Click += new System.EventHandler(days_Click);
                                DayTableHold.Controls.Add(newlabel, row, coll);

                                numday++;
                                reset = 1;
                                if (row == 6)
                                {
                                    coll = 1;

                                }
                                else coll = 0;
                                Console.WriteLine("testoutput1 " + numday + " " + label);

                            }
                            else if (reset == 1)
                            {
                                labelnum = numday + 1;
                                label = labelnum.ToString();
                                newlabel.Text = label;
                                newlabel.Margin = new System.Windows.Forms.Padding(17, 0, 10, 0);
                                newlabel.Click += new System.EventHandler(days_Click);
                                DayTableHold.Controls.Add(newlabel, row, coll);
                                numday++;
                                Console.WriteLine("test output2 " + numday + " " + label);
                            }



                        }



                }



        }

    }

Это мой обработчик событий для щелчка меток

    private void days_Click(object sender, EventArgs e)
    {
        //here is were i want to capture the labels of the clicks.  
        count++;
        Console.WriteLine("day was click"+ count);


    } enter code here

person Rey Lopez    schedule 21.12.2011    source источник
comment
вам нужно отобразить код, в котором вы определяете count++, а также создать делегат события, например, открытый делегат void EventHandler (отправитель объекта, EventArgs e); внутри этого сделайте что-то вроде этого this.label.Click += new System.EventHandler(this.days_Click); вам нужно будет изменить это, чтобы правильно работать для вашего примера.. также добавьте -= для того же обработчика событий выше   -  person MethodMan    schedule 21.12.2011


Ответы (1)


Вам нужно подключиться к какому-то событию на Label при его создании, поэтому после вашей строки:

newLabel = new Label();

вам нужно добавить обработчик события Click:

newLabel.Click += new EventHandler(days_Click);

Затем внутри вашего обработчика событий Click вы можете получить Label из объекта sender:

Label selectedLabel = (Label)sender;
string labelText = selectedLabel.Text;
person Samuel Slade    schedule 21.12.2011
comment
@ReyLopez Не забудьте проголосовать за любые полезные ответы и принять правильный ответ. - person Samuel Slade; 21.12.2011