按下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
相关产品推荐
相关产品推荐

