winforms 动态生成复选框,但事件处理程序只对最后一个起作用

ugmeyewa  于 2022-11-16  发布在  其他
关注(0)|答案(1)|浏览(135)

我试图使动态复选框与事件处理程序,但事件处理程序只为最后一个生成的工作。
我试着改变我的代码的位置。我也试着做更多的复选框,如果这会有什么不同的话。

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();
    }
  }
}

我想知道如何更改代码,使每个复选框都有此事件处理程序。

wgx48brx

wgx48brx1#

这段代码应该可以完成Dmitry Bychenko建议的任务。

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来设置一些将要设置的数据。

相关问题