如何从不同的表单添加项目到列表框?

时间:2012-12-28 22:26:25

标签: c# winforms visual-studio listbox multiple-forms

我正在尝试将一个新项添加到form2中的form1中的列表框中。其背后的想法是基于form2活动最终得到不同项目的列表,每个项目彼此不同(或相同,无关紧要)。假设我打开form1(它有购物清单(列表框))并打开form2并单击按钮,将“bannana”添加到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,列表所在)使用它时,它的工作完全正常。我甚至将访问modifyer更改为public,这样就不会出现问题了。

1 个答案:

答案 0 :(得分:2)

您可以在我对我的问题的评论中提到的F​​orm2上使用公共方法。这是一个简单的例子。

<强> Form1中

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;
    }
}