如何在c#中的窗体之间传输对象
我在Windows窗体中获得了一个ListView。当表单加载ListView加载personel对象时。 我希望当一些用户双击ListView时,从ListView.SelectedItem属性获取personel对象并打开一个新表单并将此对象传输到新打开的表单。
这是我将个人对象加载到ListView的代码:
public static void GetAll(ListView list) { list.Items.Clear(); using (FirebirdEntityz context = new FirebirdEntityz()) { ObjectQuery query = context.PERSONEL; foreach (var item in query) { var mylist = new ListViewItem { Text = item.NAME }; mylist.SubItems.Add(item.SURNAME); mylist.Tag = item; list.Items.Add(mylist); } } } private void Form1_Load(object sender, EventArgs e) { GetAll(listView1); }
这是我转移的个人对象:
private void listView1_SelectedIndexChanged(object sender, EventArgs e) { PERSONEL personel = (PERSONEL)listView1.SelectedItems[0].Tag; }
在将要打开的新表单中,在表单类中添加一个新属性;
private PERSONNEL Personnel{get; set;} public ShowPersonnel(PERSONNEL _personnel){ this.Personnel = _personnel; //do whatever you want here }
在主要forms;
private void listView1_SelectedIndexChanged(object sender, EventArgs e){ PERSONNEL personnel = listView1.SelectedItems[0].Tag as PERSONNEL; Form2 form2 = new Form2(); form2.ShowPersonnel(personnel); form2.Show(); }
可能包括拼写错误。 将人员更改为PERSONEL。
您可能只需将一个公共PERSONEL
属性添加到表单中,然后在SelectedIndexChanged
事件处理程序中设置该属性。 然后,任何有权访问您的选择器表单的代码都可以访问您自定义的选定PERSONEL
属性。
- 一种方法是像米斯蒂克因素所暗示的那样拥有公共产品。
- 或者你可以有一个参数化的ctor并传递Personnel对象。 虽然,这可能会在Visual Studio中的窗体设计视图中产生一些问题。
您应该能够设置listview控件的显示成员。 在你进入for循环之前做类似的事情:
list.DisplayMember = "Name"
然后绑定对象。
list.DataSource = query.ToList()
所选项目将为您提供绑定的对象…
MessageBox.Show(((PERSONEL)list.SelectedItem).Name);
这就是它在.net 2.0中的工作方式。 但我相信在3.0及更高版本中可能有一种方法可以做到这一点……