C# WinForms健身管理App:如何为Workout类动态添加可变数量Exercise
解决方案
1. 给Workout类添加动态训练项目集合
先修改你的Workout类,加入一个支持动态增减的集合属性来存储训练项目,推荐用List<T>——它能灵活添加、删除元素,完美适配数量不固定的需求:
public class Workout { // 训练计划的其他属性,比如名称、关联客户ID等 public string PlanName { get; set; } public int ClientId { get; set; } // 用于动态存储训练项目的集合 public List<exercisios_gerais> Exercises { get; set; } // 构造函数里初始化集合,避免空引用 public Workout() { Exercises = new List<exercisios_gerais>(); } }
2. 修复按钮点击事件的逻辑问题
你的现有代码存在两个核心问题:
- 每次点击都会把所有训练项目重复添加到
listBox_ex,导致列表内容重复 - 如果
ex_geral是全局唯一实例,每次调用add_ex只是修改同一个对象,最终lista_exer里的元素都是同一个引用,显示内容完全一致
修改后的按钮事件代码如下:
// 提前实例化当前正在编辑的训练计划对象 private Workout currentEditingWorkout = new Workout(); private void button3_Click(object sender, EventArgs e) { // 每次点击新建一个训练项目实例,避免引用重复 var newExercise = new exercisios_gerais(); newExercise.add_ex(textBox_ex.Text); // 将新训练项目添加到当前训练计划的集合中 currentEditingWorkout.Exercises.Add(newExercise); // 更新ListBox:两种可选方式 // 方式1:清空后重新加载所有项目(适合需要完整展示所有项的场景) listBox_ex.Items.Clear(); foreach (var ex in currentEditingWorkout.Exercises) { listBox_ex.Items.Add(ex.devolve_ex()); } // 方式2:只添加新项(效率更高,适合快速追加) // listBox_ex.Items.Add(newExercise.devolve_ex()); // 清空输入框,方便下一次输入 textBox_ex.Clear(); }
3. 额外优化建议
- 如果需要支持删除训练项目,可以给ListBox添加右键菜单或删除按钮,通过
listBox_ex.SelectedIndex定位选中项,从currentEditingWorkout.Exercises中移除后刷新列表即可 - 给
exercisios_gerais类重写ToString()方法,这样直接将对象添加到ListBox时,会自动显示目标文本,不用每次调用devolve_ex():
之后添加到ListBox时直接写public class exercisios_gerais { private string _exerciseName; public void add_ex(string name) { _exerciseName = name; } public string devolve_ex() { return _exerciseName; } // 重写ToString方法 public override string ToString() { return _exerciseName; } }listBox_ex.Items.Add(newExercise);即可
内容的提问来源于stack exchange,提问作者A.TB
相关产品推荐
相关产品推荐

