我试图为此找到一种方法,但我似乎无法得到任何工作。我有一个表单,其中有一个按钮,打开第二个表单,其上有一个列表框,其中填充了该屏幕上的项目。然后我将所有这些项目放入列表中。这些项目一旦在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'(是你错过了使用指令或程序集引用?)
答案 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();