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

按下Enter键时如何向ArrayList添加唯一新对象?当前旧对象被替换

解决按下Enter键时集合对象被替换的问题

嘿,我一眼就发现问题出在哪啦!你每次按下Enter键的时候,都重新创建了一个Calculation实例(就是代码里的cal = new Calculation(lstboxDisplayOfInput);这行),这就导致之前保存着已添加对象的cal被新对象覆盖了——相当于每次都新开了一个空列表,之前加的内容自然就没了,看起来像是被替换掉。

解决步骤

  • 第一步:把cal从事件方法里移出来,作为类的成员变量,这样它就会一直存在,不会每次按键都被重置。
  • 第二步:只在类初始化的时候创建一次cal,事件里只负责创建新的CalcLine并添加进去。

修改后的代码示例

首先在你的类里声明成员变量并初始化:

// 把cal声明为类的成员变量,作用域覆盖整个类
private Calculation cal;

// 在类的构造函数里初始化cal(比如窗体的构造函数)
public YourFormClassName() // 替换成你的窗体/类实际名称
{
    InitializeComponent();
    // 只在这里创建一次cal实例
    cal = new Calculation(lstboxDisplayOfInput);
}

然后修改KeyDown事件的代码:

private void txtEnterCalculations_KeyDown(object sender, KeyEventArgs e) 
{
    if(e.KeyCode == Keys.Enter) 
    {
        // 去掉重新创建cal的那一行!
        CalcLine cl = new CalcLine(txtEnterCalculations.Text);
        cal.Add(cl);
        
        // 可选:添加完后清空输入框,方便用户输入下一个内容
        txtEnterCalculations.Clear();
    }
}

额外提醒

还要确认Calculation类中的Add方法确实是往内部的集合(比如ArrayList)里追加元素,而不是做了替换操作哦。如果Add方法本身逻辑有问题,也可能导致类似的情况。

内容的提问来源于stack exchange,提问作者Nick

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:47:18