1

我有 winform1ListView和添加按钮。当我按下添加按钮时,它会打开新的 winform2,其中包含 2 个文本框、姓名和保存按钮。现在我想要的是在我按下保存时将这些值添加到 listView 中。我的代码没有错误,但我的列表框不会更新。

这是我的列表类的代码:

public class Person
{
    public string Name { get; set; }

    public string Surname { get; set; }
}

这是form2代码:

public partial class add : Form
{
    public add()
    {
        InitializeComponent();
    }

    Form1 f1 = new Form1();
    List<Person> People = new List<Person>();

    private void button1_Click(object sender, EventArgs e)
    {
        Person p = new Person();
        p.Name = textBox1.Text;
        p.Surname = textBox2.Text;
        People.Add(p);
        f2.listView1.Items.Add(p.Name + " " + p.Surname);
    }
}

现在问题是调试没有显示任何错误。我的 listbox1 没有更新,我不知道我做错了什么。

尝试使用f2.ShowDialog();然后它在列表视图中显示添加的项目,但它再次打开 form1,当我添加新数据时,以前的数据将丢失。谁能帮我解决这个问题?

4

3 回答 3

1

我会确保调用者可以Person使用add表单中的信息,Form1以便当用户单击“确定”按钮时,您可以将该信息添加到列表视图中。

为简单起见,我已更改我的版本以添加单个项目。我让你来决定如何为List<Person>.

在代码中,这看起来像这样:

public partial class add : Form
{
    // notice that we don't need a List, just a single item
    public Person person = new Person();

    public add()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        this.person.Name = this.nameTextBox.Text;
        this.person.Surname = this.surnameTextBox.Text;

        // the listView is only be updated if the changes were accepted
        // setting the result to OK will also close the dialog
        this.DialogResult = DialogResult.OK;
    }
}

和代码Form1

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void addButton_Click(object sender, EventArgs e)
    {
        var add = new add();

        if (add.ShowDialog() == DialogResult.OK)
        {
            this.listView1.Items.Add(add.person.Name +
                                     " " + add.person.Surname);
        }
    }
}
于 2012-05-28T15:45:23.520 回答
0

这段代码似乎是错误的:

f2.listView1.Items.Add(p.Name + " " + p.Surname); //Form2

也许你的意思是:

f1.Show();
f1.listView1.Items.Add(p.Name + " " + p.Surname); //Form1
//this.Close(); <-- if you want to close the form after show f1

?

于 2012-05-28T15:45:41.740 回答
0

试试这个你的文本框:

public string textbox1_text
    {
        get { return textBox1.Text; }
        set { textBox1.Text = value; }
    }

使用这些代码加载新表单:

Form2 f2 = new Form2();
        f2.Owner = this;
        f2.Show();
于 2012-05-28T15:39:54.097 回答