1

form2からform1のリストボックスに新しいアイテムを追加しようとしています。その背後にある考え方は、form2アクティビティに基づいて、それぞれが互いに異なる(または同じであるかどうかは関係ありません)さまざまなアイテムのリストを作成することです。form1を開いて(そしてショッピングリスト(リストボックス)があります)、form2を開いてボタンをクリックすると、form1のリストに「バナナ」が追加されます。どうすればよいですか?form1に"addToList(parameter)"メソッドを追加し、form2から呼び出してパラメーターを渡すなど、さまざまな方法を試しましたが、リストは空のままですが、メッセージボックスなどの他のものがポップアップします。これを解決するには?

フォーム1でこのメソッドを使用してアイテムをリストに追加すると、次のように機能します。

public void addToList()
{
    MessageBox.Show("Adding stuff to list");
    listEvent.Items.Add("New item 1");
    listEvent.Items.Add("new item 2");
    MessageBox.Show("Done adding");
    listEvent.Refresh();
}

今、私が別のクラス/フォームからそれを呼び出そうとするとき、私はこれを使用します:

public void changeForm()
{
    EventPlanner mainEventForm = new EventPlanner();
    mainEventForm.addToList();
}

または:

private void btnAddEvent_Click(object sender, EventArgs e)
{
    EventPlanner mainEventForm = new EventPlanner();
    mainEventForm.addToList();
}

しかし、それでも機能しません。form1(eventplanner、リストがある場合)から使用すると、完全に正常に機能します。アクセスモディファイアをパブリックに変更したので、問題はありません。

4

1 に答える 1

2

質問へのコメントで述べたように、Form2 でパブリック メソッドを使用できます。簡単な例を次に示します。

フォーム1

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

    private void button1_Click(object sender, EventArgs e)
    {
        Form2 frm2 = new Form2();
        if (frm2.ShowDialog(this) == DialogResult.OK)
        {
            listBox1.Items.Add(frm2.getItem());
        }
        frm2.Close();
        frm2.Dispose();
    }
}

From2

public partial class Form2 : Form
{
    public Form2()
    {
        InitializeComponent();
        button1.DialogResult = DialogResult.OK;
        button2.DialogResult = DialogResult.Cancel;
    }

    public string getItem()
    {
        return textBox1.Text;
    }
}
于 2012-12-29T00:11:07.050 に答える