从另一个表单添加到列表视图

我想知道如何通过form2中的文本框输入数据来更新form1中的listview。 如果我把所有文本框放在同一个表单上,我的代码工作正常。

我想我需要一些参考第二个表格,但不能让它工作。

任何让我朝着正确方向前进的提示都会很好,也可以提供更好的方法。

这是我到目前为止的代码:

Form1中:

public partial class form1 : Form { public form1() { InitializeComponent(); } public ListView MyListView { get { return taskList; } } 

窗体2:

 public partial class form2 : Form { public form2() { InitializeComponent(); } form1 f; public add(form1 f) { this.f = f; } public void AddToList() { ListViewItem item1 = new ListViewItem(txtName.Text); item1.SubItems.Add(txtEmail.Text); item1.SubItems.Add(txtPhone.Text); f.MyListView.Items.AddRange(new ListViewItem[] { item1 }); } 

最直接的做事方式是使用事件。 您可以在form2上添加一个事件,每次添加一个项目时都会触发该事件,并包含要插入的文本(您有多条信息,因此自定义数据类型是合适的)。 然后,您可以向form2添加一个处理程序方法,该方法将该项添加到其ListView中。 然后,在创建两个表单的代码中将两者绑定在一起,生活应该是好的。

因此,要提供一些代码,首先是事件的数据结构:

 public delegate void HandleItemAdded(object sender, ItemAddedEventArgs e); public struct ItemAddedEventArgs : EventArgs { public string Name; public string Email; public string Phone; public ItemAddedEventArgs(string name, string email, string phone) { Name = name; Email = email; Phone = phone; } } 

然后我们在form2上有事件代码

 public event HandleItemAdded ItemAdded; // .. some other stuff public void RaiseItemAdded(ItemAddedEventArgs e) { if(ItemAdded != null) ItemAdded(this,e); } // ... now for your AddToList public void AddToList() { RaiseItemAdded(new ItemAddedEventArgs(txtName.Text,txtEmail.Text, txtPhone.Text); } 

现在我们可以在form1添加一个处理程序

 public void HandleItemAdded(object sender, ItemAddedEventArgs e) { ListViewItem item1 = new ListViewItem(txtName.Text); item1.SubItems.Add(txtEmail.Text); item1.SubItems.Add(txtPhone.Text); MyListView.Add(item1); } 

最后但同样重要的是,我们需要将它们联系在一起

 //...not sure what your code looks like, but we'll assume we have instances of the two forms named form1Form and form2Form form2Form.ItemAdded += form1Form.HandleItemAdded 

listview控件应该是私有的,而是向包含listview控件的表单添加一个公共方法,该控件接收要插入的数据并将其插入到listview中。

如果form2不是由form1创建并由form1显示的,那么您将不会有对调用的引用。 在这种情况下,从沟通的角度来看,事情会变得更有趣。 当发生这种情况时,您需要使用事件模型将信息从一个地方传递到另一个地方。