1

アプリケーションをナビゲートするために、ロード時にメインウィンドウが表示されます。クリックして TeacherTools ウィンドウを開くボタンがあります。ここから、新しい生徒をリストに追加できます。このウィンドウには、MainWindow に戻るための戻るボタンがあり、ここで情報がまだ使用できることを確認できます。3 つ目のウィンドウを開くと問題が発生します。これは、生徒に後で質問が表示される試験ウィンドウであり、現在ロードされている学生ビザの名前にスコアを追加する必要があります。

private List<Student> studentList = new List<Student>();

public partial class MainWindow : Window
{
    TeacherTools teachTools = new TeacherTools();
    Learning myLearning = new Learning();

    private void teachAdmin_Click(object sender, RoutedEventArgs e)
    {
        this.Hide();
        teachTools.ShowDialog();
        this.Show();
    }

    private void Selection_Click(object sender, RoutedEventArgs e)
    {
        this.Hide();
        myTest.studentName.Text = studentsList.SelectedValue.ToString();
        myTest.ShowDialog();
        this.Show();
    }

}

//Exam Window
public partial class Test : Window
{
    //I'm sure its not this
    Student loadedStudent = new Student();
    TeacherTools teachTools = new TeacherTools();

    public void(private void finishTest()
    {

        loadedStudent = teachTools.Kids.Find(delegate(Student s) { return s.Name == studentName.Text; }); //This line 
        loadedStudent.Attempted = true;
        loadedStudent.Score = score;
    }
}

そのため、「オブジェクト参照がオブジェクトのインスタンスに設定されていません。-NullReferenceException」を取得しています。MainWindow から Student オブジェクトに変更を加えることができるため、なぜこれが起こっているのかわかりません。

編集: TeacherTools クラス

public partial class TeacherTools : Window
{
    private List<Student> studentList = new List<Student>();

    public TeacherTools()
    {
        InitializeComponent();
    }

    public List<Student> Kids
    {
       get { return studentList; }
       //set { studentList = value; }
    }

    private void newStudentClick(object sender, RoutedEventArgs e)
    {
        Student student = new Student();
        student.Name = nameBox.Text;
        studentList.Add(student);
        studentData.ItemsSource = studentList;
        studentData.Items.Refresh();
        //nameBox
    }
}
4

3 に答える 3

2

「Test」という名前のウィンドウで、オブジェクトの teacherTools を使用していますが、これをどこにも作成していません。

MainWindow に同様の名前のオブジェクトがありますが、これは Test-window と共有されていません。また、テスト ウィンドウで新しいインスタンスを作成する必要があります。

于 2013-04-15T01:41:34.603 に答える
1

ウィンドウを開くと、Testウィンドウの新しいインスタンスを作成しているように見えます。つまり、リストTeacherToolsに要素がありません。Kidsこれが実現したい方法である場合は、次のようTeacherToolsに、ウィンドウ内のインスタンスをTestパブリック プロパティとして設定し、メイン ウィンドウからオブジェクトを渡すことができます。

//Test Window
public partial class Test : Window
{
    Student loadedStudent = new Student();
    public TeacherTools teachTools { get; set; }
    ...
}

//Main Window
public partial class MainWindow : Window
{
    ...

    private void Selection_Click(object sender, RoutedEventArgs e)
    {
        this.Hide();
        myTest.teachTools = this.teachTools;
        myTest.ShowDialog();
        this.Show();
    }
}

私はこれをテストしていないことに注意してください。しかし、これはあなたが探しているアプローチだと思います。また、クラスを使用してこれを処理するのではなく、異なるウィンドウを相互に渡すことによって、危険なゲームをプレイしている可能性があるとも言います。

于 2013-04-15T03:39:17.927 に答える