Вы можете добавить любой тип объекта в список, а не только строки. Создайте класс ученика и добавьте Student
объекты в список. Или, может быть, вы предпочитаете использовать свой класс ModuleData
. Но в любом случае вам не нужно использовать s_rec
со строкой, разделенной двоеточием.
public class Student
{
public string Id { get; set; }
public string Mark { get; set; }
// Required to make to have the list box display useful information about students.
public override string ToString()
{
return $"Id = {Id}, Mark = {Mark}";
}
}
Теперь добавьте параметр в конструктор формы редактирования, чтобы иметь возможность передать ученика
private Student _student;
public editMark(Student student)
{
InitializeComponent();
// Remember the student
_student = student;
StartPosition = FormStartPosition.CenterScreen;
txtStudentID.Text = student.Id;
txtMark.Text = student.Mark;
txtStudentID.Focus();
}
В форме редактирования, если вы выполните Form1 myForm = new Form1();
, это создаст новый экземпляр Form1
вместо использования существующего скрытого.
Помните, что класс является ссылочным типом, поэтому нет необходимости возвращать учащегося обратно в первый класс, потому что в этом также есть ссылка на того же самого ученика. Обновляйте только его свойства
private void btnClose_Click(object sender, EventArgs e)
{
_student.Id = txtStudentID.Text; // Only id the Id is editable.
_student.Mark = txtMark.Text;
Close();
}
В основной форме
private void BtnEditMark_Click(object sender, EventArgs e)
{
if (lstMarks.SelectedIndex == -1) {
MessageBox.Show("please select a student");
} else {
var student = (Student)lstMarks.SelectedItem;
// Pass the student as to the edit form
var myEditRecordForm = new editMark(student);
Hide();
myEditRecordForm.ShowDialog(); // The code pauses here until the edit form is closed.
Show(); // Doing this here prevents you from having the edit form knowing about Form1.
// To display the changes.
lstMarks.Items[lstMarks.SelectedIndex] = student;
}
}