我有一个主窗体,其中的列表框包含具有姓名和三个分数的学生对象。我想在新窗体中用新分数更新所选列表框的学生对象。我似乎无法引用或抓取selecteditem对象以使其显示在新窗体中。
//新表单中的代码,加载新表单时返回空值
Form1 frm = new Form1();
Student currentStudent = (Student)frm.listBox.SelectedItem;
if (currentStudent != null)
{
txtName.Text = currentStudent.Name;
}
//form 1中的代码
private void btnUpdate_Click(object sender, EventArgs e)
{
using(Form3 frm = new Form3())
{
DialogResult button = frm.ShowDialog();
}
}
2条答案
按热度按时间r6vfmomb1#
我重现了你的问题。
列表框控件绑定到数据源。
获取当前选定内容的值。
打开新表单
检测项目
niwlg2el2#
我建议使用事件将更改从子窗体推送到主窗体。
学生类
模拟一些数据
主窗体,注意我们订阅子窗体中的自定义事件。BindingSource连接到ListBox,其中BindingSource数据源来自Student的BindingList。
子窗体从构造函数中获取student,将其赋值给一个私有var,该var又是窗体上控件的数据绑定。
在将数据发送回主窗体之前,应考虑在子窗体中添加验证。在将数据发送到子窗体之前,还可以检查是否选择了当前项目。
请注意,在所提供的代码中,ListBox仅被引用一次,用户应仅在绝对必要时接触控件,而不是使用组件,例如BindingSource、BindingList。