c# - 动态生成复选框,但事件处理程序仅适用于最后一个
问题描述
我试图用事件处理程序动态地制作复选框,但事件处理程序只适用于最后一个生成的..
我试图改变我的代码的位置。我还尝试制作更多的复选框来确定这是否会有所作为。
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();
}
}
}
我想知道如何更改代码,以便每个复选框都有这个事件处理程序..
解决方案
这段代码应该按照 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 来设置一些将要设置的数据。
推荐阅读
- python - matplotlib fill_between() 在第一个/最后一个点绘制不需要的额外线条
- amazon-web-services - 强制 AMAZON S3 Bucket 下载 https
- awk - 使用 sed 重新格式化行,将一个部分复制到单独行上其他部分的开头
- android - 在 android studio Kotlin 中向下滑动重新加载
- javascript - 错误:无法从 ` 解析模块`./node_modules\expo\AppEntry`
- angular - 在嵌套的 formArray 中获取控件
- python - XGBoost 模型需要多少内存?
- javascript - 为什么 useContext 只在子组件/函数中更新?
- python - Python中的二进制加法进位和溢出
- python - 如何在 Python 中将 ndjson 文件转换为 csv 文件?