You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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():
    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时直接写listBox_ex.Items.Add(newExercise);即可

内容的提问来源于stack exchange,提问作者A.TB

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 09:03:48