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

时间:2010-06-19 23:53:22

标签: c# winforms listview

我想知道如何通过在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 });
        }

3 个答案:

答案 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显示的,那么您将不会有对调用的引用。在这种情况下,从沟通的角度来看,事情会变得更有趣。当发生这种情况时,您需要使用事件模型将信息从一个地方传递到另一个地方。