Динамически генерирует флажки, но обработчик событий работает только для последнего - PullRequest
0 голосов
/ 14 октября 2019

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

Я попытался изменить положение своего кода. Я также попытался создать больше чекбоксов, если это будет иметь какое-либо значение.

for (int i = 0; i < appointments.TotalCount; i++) {
    lstChckBox = new List<CheckBox>();
    box = new CheckBox();
    box.Tag = i;
    box.Text = appointments.Items[i].Subject;
    box.AutoSize = true;
    box.Location = new Point(KalenderLbl.Location.X, KalenderLbl.Location.Y + 
    KalenderLbl.Height + 5 + (i * 25));

    lstChckBox.Add(box);

    box.CheckedChanged += new EventHandler(chck_CheckedChanged);

    Controls.Add(box);
  }
}


void chck_CheckedChanged(object sender, EventArgs e) {
  foreach(CheckBox item in lstChckBox) {
    if (item.Checked == true) {
      Hide();
    }
  }
}

Я хочу знать, как изменить код, чтобы у каждого флажка был этот обработчик событий.

1 Ответ

0 голосов
/ 14 октября 2019

Этот код должен выполнить трюк, как было предложено Дмитрием Быченко.

var lstChckBox = new List<CheckBox>( );
for (int i = 0; i < appointments.TotalCount; i++)
{
    box = new CheckBox( );
    box.Tag = i;
    box.Text = appointments.Items[i].Subject;
    box.AutoSize = true;

    box.Location = new Point( KalenderLbl.Location.X, KalenderLbl.Location.Y + KalenderLbl.Height + 5 + ( i * 25 ) );
    lstChckBox.Add( box );

    box.CheckedChanged += new EventHandler( chck_CheckedChanged );

    Controls.Add( box );
}

void chck_CheckedChanged( object sender, EventArgs e )
{
    foreach (CheckBox item in lstChckBox)
    {
        if (item.Checked == true)
        {
            Hide( );
        }
    }
}

Я бы также предложил сократить и упростить части вашего кода, например.

var lstChckBox = new List<CheckBox>( );
var InitialYPosition = KalenderLbl.Location.Y + KalenderLbl.Height + 5;
for (int i = 0; i < appointments.TotalCount; i++)
{
    box = new CheckBox( ) {
        Tag = i,
        Text = appointments.Items[i].Subject,
        AutoSize = true,
        Location = new Point( KalenderLbl.Location.X, InitialYPosition + ( i * 25 ) )
    };
    lstChckBox.Add( box );

    box.CheckedChanged += new EventHandler( chck_CheckedChanged );

    Controls.Add( box );
}

Минимизациякод и избегая использования box.Property для установки некоторых данных, которые будут установлены тем не менее.

...