从另一个表单获取列表框或列表的内容?

时间:2014-12-03 19:49:51

标签: c# winforms list listbox

我试图为此找到一种方法,但我似乎无法得到任何工作。我有一个表单,其中有一个按钮,打开第二个表单,其上有一个列表框,其中填充了该屏幕上的项目。然后我将所有这些项目放入列表中。这些项目一旦在form1上,将再次放入列表框中。

我遇到的问题是,我不能为我的生活找出如何访问列表框或列表的元素,我需要从主窗体访问它,否则我不能做任何其他事情

public partial class product_list : Form
{
    public List<string> ProductList { get; private set; }

    public product_list()
    {
        InitializeComponent();

        ProductList = new List<string>();
    }

    public void btnAdd_Click(object sender, EventArgs e)
    {


        string selectedItem = (string)listBox1.SelectedItem;
        listBox2.Items.Add(selectedItem);
        ProductList.Add(selectedItem);
    }

    public void btnRemove_Click(object sender, EventArgs e)
    {
        string selectedItem = (string)listBox2.SelectedItem; 
        listBox2.Items.Remove(selectedItem);
        ProductList.Remove(selectedItem);
    }

    public void btnClose_Click(object sender, EventArgs e)
    {
        this.Close();   
    }
}

这是我的第二个表格。这下面是我目前的主要表单代码

public partial class Form1 : Form
{
    Form productSelect = new product_list();

    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {

    }

    private void button1_Click(object sender, EventArgs e)
    {
        Register.Visible = true;
    } 

    private void btnService_Click(object sender, EventArgs e)
    {

    }

    private void btnProduct_Click(object sender, EventArgs e)
    {
        productSelect.ShowDialog();

        var itemsFromSecondForm = productSelect.ProductList;
    }
}

正如你所看到的,我并不是很远,但这已经让我筋疲力尽了一段时间。

任何人都有一种方法可以用来获取列表框中的所有元素或者form1中的列表本身吗?

编辑:将我的代码更新为我现在拥有的代码。仍然收到错误

错误1'System.Windows.Forms.Form'不包含'ProductList'的定义,并且没有可以找到接受类型'System.Windows.Forms.Form'的第一个参数的扩展方法'ProductList'(是你错过了使用指令或程序集引用?)

2 个答案:

答案 0 :(得分:0)

使用私人设定者将ProductList设为公共财产。在构造函数中初始化它。 (我给了它一个私有的setter,因为你不需要从第二个Form之外实例化它。)

public List<string> ProductList { get; private set; }

public product_list()
{
    InitializeComponent();

    ProductList = new List<string>();
}

然后,在关闭第二个表单后,您可以在主表单中访问它:

private void btnProduct_Click(object sender, EventArgs e)
{
    productSelect.ShowDialog();

    var itemsFromSecondForm = productSelect.ProductList;
}

关于最新更新中的错误:

  

错误1&#39; System.Windows.Forms.Form&#39;不包含&#39; ProductList&#39;的定义并且没有扩展方法&#39; ProductList&#39;接受类型为'System.Windows.Forms.Form&#39;的第一个参数。可以找到(你错过了使用指令或程序集引用吗?)

这是因为公共财产位于您的product_list课程中,而不在基础Form课程中。您必须创建类的实例,而不是Form的实例。

另外,FWIW,我更喜欢创建尽可能接近我使用它们的表单实例:

private void btnProduct_Click(object sender, EventArgs e)
{
    // A "using" block will take care of disposing of your Form
    //  when you're finished using it.
    using (var productSelect = new product_list())
    {
        productSelect.ShowDialog();

        var itemsFromSecondForm = productSelect.ProductList;

        // do something with itemsFromSecondForm
    }
}

答案 1 :(得分:0)

回答错误1:

改变这个:

Form productSelect = new product_list();

到此:

product_list productSelect = new product_list();