在你们的帮助下,我想出了这个代码,它从.txt文件加载一个数据库并用值填充一个列表。我实际上使用列表获取值时遇到了一些麻烦。继承我的Program.cs中的代码
static class Program
{
var customers = new List<Customer>();
static void loadData() //Load data from Database
{
string[] stringArray = File.ReadAllLines("Name.txt");
int lines = stringArray.Length;
if (!((lines % 25) == 0))
{
MessageBox.Show("Corrupt Database!!! Number of lines not multiple of 25!");
Environment.Exit(0);
}
for(int i = 0;i<(lines/25);i++){
customers.Add(new Customer
{
ID=stringArray[(i*25)],
Name = stringArray[(i * 25) + 1],
Address = stringArray[(i * 25) + 2],
Phone = stringArray[(i * 25) + 3],
Cell = stringArray[(i * 25) + 4],
Email = stringArray[(i * 25) + 5],
//Pretend there's more stuff here, I'd rather not show it all
EstimatedCompletionDate = stringArray[(i * 25) + 23],
EstimatedCompletionTime = stringArray[(i * 25) + 24]
});
}
}
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
loadData();
Application.Run(new Form1());
}
}
和class1.cs中的代码 - Customer类
public class Customer
{
public string ID { get; set; }
public string Name { get; set; }
public string Address { get; set; }
public string Phone { get; set; }
public string Cell { get; set; }
public string Email { get; set; }
//Pretend there's more stuff here
public string EstimatedCompletionDate { get; set; }
public string EstimatedCompletionTime { get; set; }
}
但是如果我试图从customers[1].ID
EDIT(来自form2.cs)获取值,我会得到“客户在当前上下文中不存在”。我如何宣布客户可以随时随地访问?
谢谢! :)
答案 0 :(得分:2)
您可以将customers
对象传递给Form2
或创建静态列表。无论哪种方式,它都需要是静态的,因为loadData
是静态的。
要使其成为静态,在Program.cs中,您可以执行以下操作:
public static List<Customer> Customers { get; set; }
在LoadData
的第一行,只需执行:
Form1.Customers = new List<Customer>();
然后,只要您需要访问它,只需调用Form1.Customers
(例如:Form1.Customers[1].ID
)
答案 1 :(得分:1)
customers
课程中根本看不到您的Form2
变量。您需要将customers
传递给Form2
类的实例(通过自定义构造函数,方法参数或通过设置Form2
类上实现的公共属性/字段来注入它)。
你需要这样的东西:
public partial class Form2 : Form
{
// add this...
public List<Customer> Customers
{
get;
set;
}
然后,如果您在Form2
中创建Program
,您所做的就是:
Form2 f2 = new Form2(); // supposing you have this already, whatever you named it
f2.Customers = customers; // customers being your variable
如果您是在Form2
内创建Form1
,那么您必须先将customers
传递给Form1
,例如。正如Adam Plocher
向您展示(如果您将其设为静态),然后再向Form2
展示,但原则保持不变。
另一方面,这不是一个非常好的编程习惯,但这超出了你的问题的范围。
答案 2 :(得分:0)
loadData()
是static
,因此无法看到非静态实例变量。将var customers
更改为static var customers
。