我想知道如何通过在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 });
}
答案 0 :(得分:3)
最直接的做事方式是使用事件。您可以在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
答案 1 :(得分:0)
listview控件应该是私有的,而是在包含listview控件的表单中添加一个公共方法,该控件接收要插入的数据并将其插入到列表视图中。
答案 2 :(得分:0)
如果form2不是由form1创建并由form1显示的,那么您将不会有对调用的引用。在这种情况下,从沟通的角度来看,事情会变得更有趣。当发生这种情况时,您需要使用事件模型将信息从一个地方传递到另一个地方。