如何在C#中正确将Windows窗体数据存入跨类数组?
问题:如何将变量存入另一个类中声明的数组?
我需要收集一些数据并保存到数组中,已经创建了一个类来存储所有数组,但尝试将变量保存到该数组时遇到问题,请问怎么把不同变量存入另一个类里声明的数组?
相关代码
按钮点击事件代码
private void button2_Click(object sender, EventArgs e) { Terminal terminales = new Terminal(); String terminalName = textName.Text; terminales.TerminalName = terminalName; String terminalDirection = directText.Text; terminales.TerminalDirection = terminalDirection; String terminalPhone = phoneText.Text; terminales.TerminalPhone = terminalPhone; DateTime horaApertura = DateTime.Parse(hour1Text.Text.ToString()); //return horaApertura.Value.ToString("HH:mm"); terminales.HoraApertura = horaApertura; DateTime horaCierre = DateTime.Parse(hour1Text.Text.ToString()); terminales.HoraCierre = horaCierre; contador = contador + 1; for(int i = 0; i < Arreglos.terminalesArray.Length; i++) { if (Arreglos.terminalesArray[i] != null) { Arreglos.terminalesArray[i] = terminales; break; } } MessageBox.Show(terminales.HoraCierre.ToString()); MessageBox.Show(Arreglos.terminalesArray[0].HoraApertura.ToString()); }
注:消息框仅用于测试。
Terminal类代码
public class Terminal { private int terminalID; private string terminalName; private string terminalDirection; private string terminalPhone; private bool terminalEstado; private DateTime horaApertura; private DateTime horaCierre; public Terminal() { } public Terminal(int terminalID, string terminalName, string terminalDirection, string terminalPhone, bool terminalEstado, DateTime horaApertura, DateTime horaCierre) { this.terminalID = terminalID; this.terminalName = terminalName; this.terminalDirection = terminalDirection; this.terminalPhone = terminalPhone; this.terminalEstado = terminalEstado; this.horaApertura = horaApertura; this.horaCierre = horaCierre; } public int TerminalID { get => terminalID; set => terminalID = value; } public string TerminalName { get => terminalName; set => terminalName = value; } public string TerminalDirection { get => terminalDirection; set => terminalDirection = value; } public string TerminalPhone { get => terminalPhone; set => terminalPhone = value; } public bool TerminalEstado { get => terminalEstado; set => terminalEstado = value; } public DateTime HoraApertura { get => horaApertura; set => horaApertura = value; } public DateTime HoraCierre { get => horaCierre; set => horaCierre = value; } }
解决方案
先修正原数组方案的问题
你的代码里有两个核心问题:
- 循环判断条件写反了:你现在是找
!= null的位置赋值,这会覆盖已有的数据,应该找== null的空位来添加新实例 - 要确保
Arreglos.terminalesArray已经完成初始化(比如在Arreglos类中声明为public static Terminal[] terminalesArray = new Terminal[100];,根据需求设置长度)
修正后的按钮点击事件代码:
private void button2_Click(object sender, EventArgs e) { Terminal terminal = new Terminal(); terminal.TerminalName = textName.Text; terminal.TerminalDirection = directText.Text; terminal.TerminalPhone = phoneText.Text; // 用TryParse避免无效时间抛出异常,同时注意horaCierre应该对应另一个输入框(比如hour2Text) if (DateTime.TryParse(hour1Text.Text, out DateTime horaApertura)) { terminal.HoraApertura = horaApertura; } if (DateTime.TryParse(hour2Text.Text, out DateTime horaCierre)) { terminal.HoraCierre = horaCierre; } // 找到数组第一个空位存入 for(int i = 0; i < Arreglos.terminalesArray.Length; i++) { if (Arreglos.terminalesArray[i] == null) { Arreglos.terminalesArray[i] = terminal; break; } } // 安全的测试输出 MessageBox.Show(terminal.HoraCierre.ToString()); if (Arreglos.terminalesArray[0] != null) { MessageBox.Show(Arreglos.terminalesArray[0].HoraApertura.ToString()); } }
更推荐的List替代方案
数组长度固定,若不确定数据量,用List<Terminal>会更灵活,无需手动寻找空位:
- 修改
Arreglos类:
public static class Arreglos { public static List<Terminal> terminalesList = new List<Terminal>(); }
- 修改按钮点击事件:
private void button2_Click(object sender, EventArgs e) { Terminal terminal = new Terminal(); terminal.TerminalName = textName.Text; terminal.TerminalDirection = directText.Text; terminal.TerminalPhone = phoneText.Text; if (DateTime.TryParse(hour1Text.Text, out DateTime horaApertura)) { terminal.HoraApertura = horaApertura; } if (DateTime.TryParse(hour2Text.Text, out DateTime horaCierre)) { terminal.HoraCierre = horaCierre; } // 直接添加到List,无需管理空位 Arreglos.terminalesList.Add(terminal); // 测试输出 MessageBox.Show(terminal.HoraCierre.ToString()); if (Arreglos.terminalesList.Count > 0) { MessageBox.Show(Arreglos.terminalesList[0].HoraApertura.ToString()); } }
内容的提问来源于stack exchange,提问作者jlobo25
相关产品推荐
相关产品推荐

