1

ボタンを追加してwinform1を持っていListViewます。追加ボタンを押すと、名前と姓の2つのテキストボックスと保存ボタンがある新しいwinform2が開きます。今私が欲しいのは、保存を押したときにこれらの値を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

ユーザーが [OK] ボタンをクリックしたときに、その情報をリストビューに追加できるよう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

あなたのテキストボックスのためにこれを試してください:

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 に答える
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 に答える