【问题标题】:Getting contents of a listbox or a list from another form?从另一个表单获取列表框或列表的内容?
【发布时间】:2014-12-03 19:49:50
【问题描述】:

我试图找到一种方法来解决这个问题,但我似乎无法得到任何工作。我有一个表单,它有一个按钮,可以打开第二个表单,上面有一个列表框,里面装满了屏幕上的项目。然后我将所有这些项目放入一个列表中。这些项目一旦出现在 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”(是您缺少 using 指令或程序集引用?)

【问题讨论】:

  • 您是否已通过代码...?还有什么列表是私有的,公共的,静态的..?我认为默认情况下,如果您没有将列表类型明确声明为public,那么默认情况下它是私有的

标签: c# winforms list listbox


【解决方案1】:

ProductList 设为公共属性,并使用私有设置器。在您的构造函数中初始化它。 (我给了它一个私有的 setter,因为你不需要从第二个表单之外实例化它。)

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“System.Windows.Forms.Form”不包含“ProductList”的定义,并且找不到接受“System.Windows.Forms.Form”类型的第一个参数的扩展方法“ProductList”(是您缺少 using 指令或程序集引用?)

这是因为该公共属性在您的 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
    }
}

【讨论】:

  • 我似乎在 var itemsFromSecondForm = productSelect.ProductList; 上的 form1 上出现错误知道什么会导致错误说表单“不包含'productlist'的定义
  • 不,这不是我偶然在这里输入的问题
【解决方案2】:

回答您的错误 1:

改变这个:

Form productSelect = new product_list();

到这里:

product_list productSelect = new product_list();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多