新しいDataCreate
オブジェクトを作成してDataTableManager
オブジェクトのSchoolInfo
リストに追加するには、次のようにする必要があります。
DataTableManager manager = new DataTableManager();
DataCreate data = new DataCreate();
data.LastName = TextBox1.Text;
data.ID = TextBox2.Text;
manager.SchoolInfo.Add(data);
SchoolInfo
ただし、プロパティの型として宣言するのは悪い習慣であることを指摘しておく必要List<Object>
があります。として宣言する方がはるかに良いでしょうList<DataCreate>
。
DataCreate オブジェクト自体からリストに DataCreate オブジェクトを追加するには、次のようにする必要があります。
manager.SchoolInfo.Add(this);
DataTableManager はオブジェクトではなく、型です。オブジェクトを作成するには、インスタンス化する必要があります ( を呼び出したときのようにnew DataTableManager
)。または、インスタンス化する必要のあるオブジェクトがなく、型名 (例: DataTableManager.SchoolInfo.Add(...)
) を介してそのメンバーに直接アクセスできるように、静的クラスにすることもできますが、それは現在定義されている方法ではありません。
ただし、あなたがやっている方法で物事を行うことはお勧めしません。グローバル変数を持つことは決して良い考えではありません。むしろ、フォームが DataTableManager オブジェクトにアクセスする必要がある場合は、それを要求する必要があります (フォームのコンストラクターのパラメーターに渡すか、フォームのパブリック プロパティを設定するか、何らかの呼び出しを行うかのいずれかによって)。フォームのパブリック初期化メソッドの)。これらの DataCreate フォームを表示しているコードがどこかにある必要があります。マネージャーをインスタンス化し、それをフォームに渡す必要があるのは、そのコードが存在するそのクラスです。
ただし、通常、すべてのフォームへの参照を保存する必要はありません。通常、入力したデータを保存するだけです。そのためには、機能を持たず、データのパブリック プロパティのみを持つ新しいクラスを作成する必要があります。次に、フォームにこれらのオブジェクトのいずれかを返させ、中央クラスにフォームを表示させ、返されたデータを取得してマネージャーに追加します。
例えば:
public class DataManager
{
public List<StudentData> Students { get; set; }
// etc.
}
public class StudentData
{
public string FirstName { get; set; }
public string LastName { get; set; }
// etc.
}
public class StudentEntryDialog : Form
{
public StudentData StudentData { get; set; }
// ... code to call storeData method when user chooses to do so ...
private void storeData()
{
StudentData = new StudentData();
StudentData.FirstName = TextBox1.Text;
StudentData.LastName = TextBox2.Text;
// etc.
}
}
public class CentralCodeOfSomeSort
{
private DataManager manager = new DataManager();
private showStudentEntry()
{
StudentEntryDialog dialog = new StudentEntryDialog();
dialog.ShowDialog();
if (dialog.StudentData != null)
manager.Students.Add(dialog.StudentData);
}
}