0

皆さんの助けを借りて、.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; }
}

しかし、EDIT (form2.cs から) から値を取得しようとすると、customers[1].ID「この現在のコンテキストには顧客が存在しません」というメッセージが表示されます。どこからでもアクセスできるように顧客に宣言するにはどうすればよいですか?

ありがとう!:)

4

3 に答える 3

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)

于 2013-10-09T23:01:00.120 に答える
1

customers変数は、Form2クラス内では表示されません。customersクラスのインスタンスに渡す必要がありますForm2(カスタムコンストラクター、メソッドパラメーターを介して、またはクラスに実装されたパブリックプロパティ/フィールドを設定して注入しますForm2)。

次のようなものが必要です。

public partial class Form2 : Form
{
    // add this...
    public List<Customer> Customers
    { 
       get;
       set;
    }

そして、 で作成するForm2Program、次のようになります。

Form2 f2 = new Form2(); // supposing you have this already, whatever you named it
f2.Customers = customers; // customers being your variable

Form2内で fromを作成している場合は、最初にForm1に渡す必要があります。あなたが示したように(静的にした場合)、さらに に進みますが、原則は同じままです。customersForm1Adam PlocherForm2

余談ですが、これはあまり良いプログラミング手法ではありませんが、これはあなたの質問の範囲を超えています。

于 2013-10-09T22:58:25.867 に答える
0

loadData()であるstaticため、非静的インスタンス変数を表示できません。に変更var customersstatic var customersます。

于 2013-10-09T22:59:32.780 に答える